Curl ich wirklich nicht verstehen, was hier vorgeht. Ich möchte einfach eine http-Anfrage von innerhalb eines Andock-Containers zu einem anderen Andock-Container über den Host unter Verwendung der öffentlichen IP-Adresse des Hosts, auf einem veröffentlichten Port.Warum kann ich nicht einen Docker Container von einem anderen über den Host
Hier ist mein Setup. Ich habe meine Dev-Maschine. Und ich habe einen Docker Host-Rechner mit zwei Containern. CONT_A zuhört und veröffentlicht einen Web-Service auf Port 3000.
DEV-MACHINE
HOST (Public IP = 111.222.333.444)
CONT_A (Publish 3000)
CONT_B
Auf meiner Dev-Maschine (eine ganz andere Maschine)
ich ohne Probleme rollen kann
curl http://111.222.333.444:3000 --> OK
Wenn ich SSH in den Host
Ich kann ohne problesm kräuseln
curl http://111.222.333.444:3000 --> OK
Wenn ich in CONT_B ausführen
nicht möglich, nur Timeout. Ping ist in Ordnung, aber ...
docker exec -it CONT_B bash
$ curl http://111.222.333.444:3000 --> TIMEOUT
$ ping 111.222.333.444 --> OK
Warum?
Ubuntu 16.04, Dockarbeiter 1.12.3 (Standard-Netzwerk-Setup)
Ich denke, dies ist wahrscheinlich, weil, wie Docker Griffe mit IPTables & Bridge-Netz. Ich werde es nachschlagen müssen, aber ich vermute, die IP-Adresse, die Sie geben, ist wahrscheinlich die IP-Adresse vom Host aus gesehen, nicht die "interne IP" im Andock-Netzwerk zugeordnet. Der Grund, warum Ping aufgelöst werden kann, ist, dass es zum Docker-Host (nicht zum Container) aufgelöst wird. Aber der Docker Weg dies zu erreichen ist, den Port nicht in Container A zu veröffentlichen, sondern stattdessen ein Overlay-Netzwerk https://docs.docker.com/engine/userguide/networking/. –
@RikNauta Die IP-Adresse, die ich verwende, ist der ** öffentliche Host-IP **. Sicherlich sollte das immer korrekt gelöst werden, es sei denn, es widerspricht irgendwie dem internen Docker-Netzwerk. Es ist eine '104 ....' IP-Adresse. – pqvst
Das sollte funktionieren. Es gibt ein Userland-Proxy-Prozess-Andockfenster, das ausgeführt wird, um den Host zu überwachen und die TCP-Verbindung in den Container weiterzuleiten. Funktioniert das gleiche in Docker 1.11? Haben Sie 'userland-proxy' im Docker-Daemon auf false gesetzt? – Matt