2017-08-04 3 views
0

Docker erkunden 17.06.Docker-Container kann die Außenwelt nicht anpingen - iptables

Ich habe Docker auf Centos 7 installiert und einen Container erstellt. Begann den Container mit der Standardbrücke. Ich kann beide Host-Adapter pingen, aber nicht die Außenwelt, z.B. www.google.com

Alle beraten gibt es basiert auf älteren Versionen von Docker und iptables Einstellungen.

Ich würde gerne verstehen, wie man an die Außenwelt pingt, was bitte erforderlich ist?

TIA!

Antwort

0

Bitte überprüfen Sie Ihre vorhandene iptables:

iptables --list 

Es sollte Ihnen Liste der iptables mit Quell- und Ziel-Details zeigen.

target  prot opt source    destination 

DOCKER-USER all -- anywhere   anywhere 

Wenn es überall für Quelle und Ziel es außerhalb IPs anpingen soll. (Vorgabe seiner überall)

Wenn nicht diesen Befehl verwenden Ihre iptable einzustellen (DOCKER-USER)

iptables -I DOCKER-USER -i eth0 -s 0.0.0.0/0 -j ACCEPT 

Hoffe, das wird helfen!

+0

Vielen Dank für Ihre schnelle Antwort! Ich werde innerhalb von 24 Stunden testen und versuchen (weg von Setup atm). Aber aus der Erinnerung ist alles "überall". – user1945022

+0

hier ist iptables --list https://pastebin.com/KfUUCyu2 – user1945022

+0

Sie ping außerhalb IPs aus Container oder Host-Maschine? IP-Tabellen sehen für Sie gut aus. Kannst du einmal versuchen, iptables -nvL auszuführen und dort auch nach irgendwelchen Einschränkungen zu suchen. Und wo ist der Server gehostet? Aws? Google? Azurblau? –

0

Eine gute Idee zu verwenden ist, wenn ein Container Start:

docker run -p <host_port>:<docker_port> 

Dadurch wird sichergestellt, dass Ihre Brücke Netzwerk sowohl Docker und Host in einem Hafen binden, und dann kann man die Außenwelt gelangen von Ihrem Container.

Wenn Sie -p nicht verwenden möchten, können Sie beide Iptables, Container und S.O überprüfen und hier eingeben?

Referenz:

https://docs.docker.com/v1.11/engine/reference/commandline/run/

+0

Danke für die Hinweise. Ich starte den Container mit der Option -p, um den Host-Port 8443 für https-Verkehr an den Container-Port 443 umzuleiten. Der letzte Docker 17.06 hat sich seit der Dokumentation von v1.1, auf die du dich beziehst, stark verändert. – user1945022

1

Wenn Sie in der Lage www.google.com von Host-Maschine ping versuchen Sie folgende Schritte ausführen: laufen auf Host-Maschine:

sudo ip addr show docker0 

Sie Ausgabe erhalten welches einschließt:

inet 172.17.2.1/16 scope global docker0 

Der Andock-Host hat die IP-Adresse 172.17.2.1 auf der Netzwerkschnittstelle docker0.

Starten Sie dann den Container:

docker run --rm -it ubuntu:trusty bash 

und

ip addr show eth0 

Ausgang gehören laufen:

inet 172.17.1.29/16 scope global eth0 

Ihr Behälter hat die IP-Adresse 172.17.1.29. Nun ein Blick auf die Routing-Tabelle: Lauf:

route 

Ausgabe gehören:

Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
default   172.17.2.1  0.0.0.0   UG 0  0  0 eth0 

Es bedeutet, die IP-Adresse des Host-Docker 172.17.2.1 wird als Standard-Route festgelegt und ist von dein Behälter.

Versuch ping jetzt auf Ihre Host-Maschine ip:

[email protected]:/# ping 172.17.2.1 
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data. 
64 bytes from 172.17.2.1: icmp_seq=1 ttl=64 time=0.071 ms 
64 bytes from 172.17.2.1: icmp_seq=2 ttl=64 time=0.211 ms 
64 bytes from 172.17.2.1: icmp_seq=3 ttl=64 time=0.166 ms 

Wenn dies höchstwahrscheinlich funktioniert können Sie www.google.com ping

Hoffe, es hilft!

+0

Vielen Dank! – user1945022

Verwandte Themen