2015-11-14 17 views
6

Mam działający kontener nginx: # docker run --name mynginx1 -P -d nginx;kontener kontenera nginx nie odbierający żądania z zewnątrz, odmowa połączenia

I got jej informacji PORT przez docker ps: 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp

Wtedy mogę dostać odpowiedź od wewnątrz pojemnika (ID: c30991a04b2f):

  • docker exec -i -t c3099 bash

  • curl http://localhost => którego powrót domyślna treść strony: index.html, działa

Jednak, kiedy dokonać curl http://localhost:32769 zewnątrz pojemnika, mam to:

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


używam na mac z wersji 1.9.0 Döcker; nginx najnowsze

Czy ktoś wie, co to jest przyczyną? Jakaś pomoc? dziękuję

Odpowiedz

5

Jeśli korzystasz z systemu OS X, prawdopodobnie używasz maszyny wirtualnej VirtualBox do pracy w środowisku dokowania.

Upewnij się, że masz forwarded your port 32769 do rzeczywistego hosta (mac), aby ten port był widoczny z localhost.
Jest to ważne dla starego boot2docker lub nowego komputera dokowanego.

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

(controlvm jeśli VM pracuje, modifyvm jest VM jest zatrzymany)
(zastąpić "boot2docker-vm" b nazwa wyciagnięcie Twojego VM: patrz docker-machine ls)

Polecam nie używać -P , ale statyczne mapowanie portów: -p xxx:80 -p yyy:443.
W ten sposób można wykonać przekierowanie portu raz, używając ustalonych wartości.

Oczywiście, można uzyskać dostęp do maszyny wirtualnej bezpośrednio przez docker-machine ip vmname

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

Dzięki, że to pomaga.! Przeczytałem to również w innym poście. Właśnie zacząłem uczyć się dokera, wciąż mam dużo doktorów, przez które przejść. – user3035623

2

rozwiązany .. I zrozumiał, jak działa doker mapowanie portów. Ponieważ używam mac, hostem dla kontenera nginx jest VM, 0.0.0.0:32769->80/tcp mapuje port 80 kontenera do portu 32769 maszyny wirtualnej.


rozwiązanie:

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

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

+0

Możesz także uruchomić "docker-machine ls", aby zobaczyć adres IP twojego "domyślnego". Na przykład VM IP w tym przypadku to 192.168.99.100: > docker-machine ls NAZWA AKTYWNY URL URL URL SWARMOWE BŁĘDY DARMOWE domyślny * virtualbox Działający tcp: //192.168.99.100: 2376 v1.9.1 – Lionel

2

Niezupełnie odpowiedzi na twoje pytanie, ale spędzić trochę czasu próbuje dowiedzieć się podobną cechę kontekście "dlaczego mój doker pojemnik nie łączący się z elastycznym wyszukiwaniem localhost:9200 "i to był pierwszy S.O. Pytanie, które pojawia się, więc mam nadzieję, że to pomaga jakaś inna osoba googlowania

jeśli link ing pojemniki razem (np docker run --rm --name web2 --link db:db training/webapp env)

... następnie Dockers dodaje Enviroment zmienne:

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

... a także aktualizuje swoją /etc/hosts

# /etc/hosts 
#... 
172.17.0.9 db 

więc można technicznie połączyć ping db

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

więc dla elastycznego wyszukiwania jest

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

tak wget elasticseach:9200 zadziała

Powiązane problemy