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?
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.
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
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:
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"
Blockquote
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.