2016-09-09 2 views
0

Ich habe mehrere Docker Container im selben Netzwerk. Ich versuche, curl auf containerA zu verwenden, um das Ergebnis von einer API auf test01.docker Container zu erhalten.Docker Container: Curl zwischen den Containern funktioniert nicht

ich diesen Befehl auf dem Behälter A:

* Hostname was NOT found in DNS cache 
* Trying 172.19.0.24... 
* connect to 172.19.0.24 port 8031 failed: Connection refused 
* Failed to connect to test-01.docker port 8031: Connection refused 
* Closing connection 0 

Wenn ich versuche, ping test01.docker von containerA mit dem folgenden Befehl:

curl -s test-01.docker:8031/app?status -v 

Die Ausgabe ist wie folgt

ping test-01.docker 

Es ist erfolgreich.

Wenn ich docker ps, zeigt es die folgenden Informationen. In meinem

43823212be7e  mytestimage  "/docker-entrypoint.s" 53 seconds ago  Up 47 seconds  22/tcp, 2812/tcp, 5060-5061/tcp, 6970-6971/tcp, 8002/tcp, 8030-8031/tcp, 8033/tcp, 8071/tcp, 8888/tcp, 9020-9023/tcp containerA 

Dies zeigt, dass Port 8031 ​​ausgesetzt ist. Ich bin nicht in der Lage herauszufinden, warum Curl hier versagt. Wenn ich folgenden Befehl auf Test-01.docker laufen, gibt es mir eine korrekte Ausgabe:

curl -s localhost:8031/app?status 

nicht sicher, warum es nicht von anderen Behältnissen in demselben Netzwerk arbeiten. Bitte sag mir, ob ich etwas verpasse.

Update: Meine Docker-compose Datei wie folgt aussieht:

version: '2' 

    services: 
    test-01.docker: 
     image: ############## 
     expose: 
     - 22 
     - 2812 
     - 8031 
     hostname: test-01 
     domainname: docker 
+0

Ganz einfach, weil der docker Behälter * nicht * in der Tat ist auf Port 8031 ​​hört auf internes Andocknetzwerk. Der Port 8031 ​​ist über eine andere Schnittstelle als die, über die die Andockcontainer miteinander kommunizieren, Ihrem Host-Computer zugänglich. – ffledgling

+0

Können Sie Dockerfiles/docker-compose.yml freigeben? – johnharris85

+0

@ffledgling Wie kann ich den Port 8031 ​​über die gleiche Schnittstelle, die von Dockercontainern verwendet wird, für meinen Host-Computer freigeben? –

Antwort

0

Es scheint wie, dass die App innerhalb Test-01.docker auf einem 127.0.0.1 hören laufen, so kann es nicht durch irgendein zugegriffen werden andere Programme außerhalb dieses Behälters

App lassen (im Test-01.docker) hören auf 0.0.0.0 Adresse und versuchen sie es erneut

+0

Sie haben Recht. Das ist das Problem. Wie kann ich es ändern, um auf 0.0.0.0 anstatt auf 127.0.0.1 zu hören? –

+0

das ist nicht das Geschäft über Docker, ich denke, ich muss wissen, was die App ist, bevor ich dir sage, wie zu – Choldrim

Verwandte Themen