2015-11-14 15 views
6

Ich habe einen laufenden nginx-Container: # docker run --name mynginx1 -P -d nginx;docker nginx container empfängt keine Anfrage von außen, Verbindung verweigert

Und bekam seine PORT Informationen von docker ps: (: c30991a04b2f id):

  • docker exec -i -t c3099 bash

  • curl http://localhost => die Rückkehr 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp

    Dann habe ich Antwort aus dem Behälter erhalten könnte der Standard index.html Seiteninhalt, es funktioniert

Allerdings, wenn ich die curl http://localhost:32769 außerhalb des Behälters zu machen, habe ich dies:

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


ich auf einem Mac leite mit Docker Version 1.9.0; nginx neueste

Weiß jemand, was diese Ursache? Irgendeine Hilfe? danke

Antwort

5

Wenn Sie auf OSX sind, verwenden Sie wahrscheinlich eine VirtualBox-VM für Ihre Docker-Umgebung.

Stellen Sie sicher, dass Sie forwarded your port 32769 zu Ihrem tatsächlichen Host (dem Mac) haben, damit dieser Port von localhost sichtbar ist.
Dies gilt für den alten boot2docker oder den neuen docker-Rechner.

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

(controlvm wenn die VM läuft, wird modifyvm die VM angehalten wird)
("boot2docker-vm" b yDie Namen Ihres vm ersetzen: siehe docker-machine ls)

Ich würde empfehlen, nicht -P zu verwenden , aber eine statische Port-Zuordnung -p xxx:80 -p yyy:443.
Auf diese Weise können Sie diese Portweiterleitung mit festen Werten einmal durchführen.

Natürlich können Sie die VM Zugriff direkt über docker-machine ip vmname

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

Dank arbeiten, hilft es.! Ich habe das gerade auch in einem anderen Post gelesen. Ich habe gerade angefangen, Docker zu lernen, aber ich habe immer noch eine Menge Dokumente zu erledigen. – user3035623

2

Gelöst .. ich das falsch verstanden, wie Docker Port-Mapping funktioniert. Da ich mac verwende, ist der Host für den nginx-Container eine VM, 0.0.0.0:32769->80/tcp bildet den Port 80 des Containers auf den Port 32769 der VM ab.


Lösung:

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

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

+0

Sie können auch "docker-machine ls" ausführen, um die IP Ihres 'Standard' zu sehen. In diesem Fall lautet die IP-Adresse der VM beispielsweise 192.168.99.100: > docker-machine ls NAME AKTIVE URL STATE URL SWARM DOCKER FEHLER default * virtualbox Wird ausgeführt tcp: //192.168.99.100: 2376 v1.9.1 – Lionel

2

Nicht gerade Antworten auf Ihre Frage, aber einige Zeit damit verbringen, in einer ähnlichen Sache, um herauszufinden, Kontext von "warum ist mein Hafenarbeiter Container verbindet sich nicht mit elastischer Suche localhost:9200 "und dies war der erste S.O. Frage, die sich öffnet, so hoffe ich es einige andere googeln Person

wenn Sie link ing Container zusammen (zB docker run --rm --name web2 --link db:db training/webapp env)

... dann Dockers fügt Umgebungsvariablen hilft:

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

... und auch aktualisiert Ihre /etc/hosts

# /etc/hosts 
#... 
172.17.0.9 db 

so können Sie technisch zu ping db

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

so für Elasticsearch verbinden ist

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

so wget elasticseach:9200

Verwandte Themen