it-swarm.com.de

Wie kann ich meinen Docker-Container von meinem Host aus anpingen?

Ich habe einen Ubuntu Docker Container auf meinem Mac erstellt

CONTAINER ID  IMAGE   COMMAND      CREATED         STATUS         PORTS                 NAMES
5d993a622d23  ubuntu  "/bin/bash"  42 minutes ago  Up 42 minutes  0.0.0.0:123->123/tcp  kickass_ptolemy

Ich habe Port als 123 eingestellt.

Meine Container-IP lautet 172.17.0.2

docker inspect 5d993a622d23 | grep IP
"LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,

Auf meinem Mac versuche ich, meinen Container anzupingen,

Ping 172.17.0.2, Ich habe das Request-Timeout für icmp_seq 0 erhalten.

Was soll ich machen? So kann mein lokaler Rechner den installierten Container pingen. Habe ich eine App-Installation auf meinem Container, einem einfachen Ubuntu-System, verpasst?

11
Neil

Mit Docker für Mac können Sie nicht direkt auf ein Container-Interface pingen oder darauf zugreifen

Die derzeit beste Lösung ist, von .__ aus eine Verbindung zu Ihren Containern herzustellen. ein anderer Behälter. Zur Zeit gibt es keine Möglichkeit, Routing bereitzustellen zu diesen Containern aufgrund von Problemen mit OSX, die Apple noch nicht hat aufgelöst. Wir verfolgen diese Anforderung, können aber nichts tun darüber derzeit.

Docker Toolbox/VirtualBox

Wenn Sie Docker Toolbox, Docker Machine über VirtualBox oder eine beliebige VirtualBox VM (wie eine Vagrant-Definition ) ausführen, können Sie ein "Host-Only Network" einrichten und auf das Docker VMs-Netzwerk zugreifen. 

Wenn Sie die default boot2docker-VM verwenden, ändern Sie die vorhandene Schnittstelle nicht, da sonst eine ganze Reihe von Docker-Dienstprogrammen nicht mehr funktionieren. Fügen Sie eine neue Schnittstelle hinzu. 

Sie müssen außerdem das Routing von Ihrem Mac zu den Containernetzwerken über die neue IP-Adresse Ihrer VM einrichten. In meinem Fall lautet der Docker-Netzwerkbereich 172.22.0.0/16 und die Host Only-Adapter-IP auf VM ist 192.168.99.100.

Sudo route add 172.22.0.0/16 192.168.99.100

Das Hinzufügen einer permanenten Route zu osx ist etwas komplexer

Dann können Sie von Ihrem Mac aus auf Container zugreifen

machost:~ ping -c 1 172.22.0.2
PING 172.22.0.2 (172.22.0.2): 56 data bytes
64 bytes from 172.22.0.2: icmp_seq=0 ttl=63 time=0.364 ms

--- 172.22.0.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.364/0.364/0.364/0.000 ms
16
Matt

Wenn in Ihrem Container eine bash-Shell integriert ist, können Sie alternativ darauf zugreifen

docker exec -it <CONTAINER ID> bash

und dann können Sie Ihre virtuelle IP anpingen

Es funktioniert in diesem Szenario:

  1. Windows-Host
  2. Linux VM auf Windows-Host installiert
  3. Docker-Container auf Linux VM -Host installiert

Jetzt musst du das merken. Container befinden sich in einem isolierten Netzwerk, sind jedoch über Ihren Docker-Container-Hostadapter mit dem Internet verbunden. Sie müssen dem Kernel Linux also mitteilen, dass er in Ihrem Netzwerk und dann in Ihrer Linux-VM verfügbar sein muss:

sysctl net.ipv4.conf.all.forwarding = 1

Sudo iptables -P FORWARD ACCEPT

In Ihrem Windows-Host müssen Sie nun eine Route für unser Containernetzwerk hinzufügen: Route "Docker-Containernetzwerk" hinzufügen, zum Beispiel "Linux VM IP"

route add 172.17.0.0/16 192.168.1.20

Blockquote

0
Ángel Ugarte

konfiguration:

PC-A a ist Docker-Host, PC-B ist ein anderer PC im Netzwerk. Führen Sie die folgenden Regeln für iptables- im Host aus, um einen Ping/Zugriff auf den Container des Dockers über PC-B durchzuführen.

iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT

iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT

anmerkung: eth0 ist die Schnittstelle von Host und docker0 ist die virtuelle Standardbrücke des Dockers.

Fügen Sie nun eine Route in PC-B hinzu. 

route add -net <dockerip> netmask <net mask> gw <docker's Host>

ping/Zugriff auf Containerdienste direkt. 

0
Guru