2015-11-14 29 views
6

Ho un contenitore nginx in esecuzione: # docker run --name mynginx1 -P -d nginx;contenitore docker nginx che non riceve la richiesta dall'esterno, connessione rifiutata

e ottenuto le sue informazioni PORT da docker ps: 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp

Poi ho potuto ottenere risposta dall'interno del contenitore (id: c30991a04b2f):

  • docker exec -i -t c3099 bash

  • curl http://localhost => che di ritorno il contenuto predefinito della pagina index.html, funziona

Tuttavia, quando faccio la curl http://localhost:32769 al di fuori del contenitore, ho ottenuto questo:

curl: (7) failed to connect to localhost port 32769: Connection refused


Sono in esecuzione su un Mac con finestra mobile versione 1.9.0; nginx latest

Qualcuno sa che cosa causa questo? Qualsiasi aiuto? grazie

risposta

5

Se si è su OSX, si sta probabilmente utilizzando una VM VirtualBox per l'ambiente della finestra mobile.

Assicurarsi di avere forwarded your port 32769 nell'host corrente (il mac), affinché tale porta sia visibile da localhost.
Questo è valido per il vecchio boot2docker o la nuova macchina mobile.

VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port32769 ,tcp,,32769,,32769" 
VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port32769 ,udp,,32769,,$32769 

(controlvm se la VM è in esecuzione, modifyvm è la VM viene arrestato)
(sostituire "boot2docker-vm" b nome ythe del vostro VM: vedi docker-machine ls)

io consiglierei di non usare -P , ma una mappatura della porta statica -p xxx:80 -p yyy:443.
In questo modo, è possibile eseguire il port forwarding una sola volta, utilizzando valori fissi.

Naturalmente, è possibile accedere al VM direttamente attraverso docker-machine ip vmname

curl http://$(docker-machine ip vmname):32769 
+0

Grazie, aiuta.! L'ho letto anche su un altro post proprio ora. Ho appena iniziato a imparare la finestra mobile, ho ancora un sacco di documenti da esaminare. – user3035623

2

risolto .. ho capito male come funziona la mappatura delle porte finestra mobile. Dal momento che sto usando mac, l'host per il contenitore nginx è una VM, 0.0.0.0:32769->80/tcp associa la porta del contenitore alla porta 32769 della VM.


soluzione:

  1. docker-machine ip vm-name =>192.168.99.xx

  2. curl http://192.168.99.xx:32769

+0

Inoltre, è possibile eseguire "ls docker-machine" per vedere l'IP del proprio "predefinito". Ad esempio, l'IP della macchina virtuale in questo caso è 192.168.99.100: > finestra mobile ls NOME URL ATTIVO URL STATO ERRORE DOCKER ERRORE predefinito * virtualbox In esecuzione tcp: //192.168.99.100: 2376 v1.9.1 – Lionel

2

Non esattamente le risposte per la domanda, ma passare un po 'di tempo a cercare di capire cosa simile in contesto di "perché è il mio docker contenitore non collegato alla ricerca elastica localhost:9200 "e questo era il primo S.O. domanda che si apre, quindi spero che aiuta un'altra persona googling

se siete link contenitori ing insieme (ad esempio docker run --rm --name web2 --link db:db training/webapp env)

... variabili poi Dockers aggiunge AMBIENTE:

DB_NAME=/web2/db DB_PORT=tcp://172.17.0.5:5432 DB_PORT_5432_TCP=tcp://172.17.0.5:5432 DB_PORT_5432_TCP_PROTO=tcp DB_PORT_5432_TCP_PORT=5432 DB_PORT_5432_TCP_ADDR=172.17.0.5

... e aggiorna anche il vostro /etc/hosts

# /etc/hosts 
#... 
172.17.0.9 db 

in modo da poter tecnicamente connettersi a ping db

https://docs.docker.com/v1.8/userguide/dockerlinks/

così per elasticsearch è

# /etc/hosts 
# ... 
172.17.0.28 elasticsearch f9db83d0dfb5 ecs-awseb-qa-3Pobblecom-env-f7yq6jhmpm-10-elasticsearch-fcbfe5e2b685d0984a00 

così wget elasticseach:9200 funzionerà