Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann

Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann

Ursprung des Problems

Wenn ich Docker verwende, muss ich leider auf Port 80 des Hosts im Docker-Container zugreifen, und dieser Port 80 ist dem Port 8080 eines anderen Containers zugeordnet. Wenn ich über die Docker-Bridge 172.17.0.1 im Container auf den Host zugreife, finde ich:

curl: (7) Verbindung zu 172.17.0.1 Port 80 konnte nicht hergestellt werden: Keine Route zum Host

Finden Sie die Ursache des Problems

Dass Container und Host mit dem Netzwerk verbunden sind, steht fest, denn aus dem Container heraus kann der Host über 172.17.0.1 angepingt werden:

root@930d07576eef:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) Bytes Daten.
64 Bytes von 172.17.0.1: icmp_seq=1 ttl=64 Zeit=0,130 ms

Sie können innerhalb des Containers auch auf andere Intranets und externe Netzwerke zugreifen.

Iptables zeigt auch, dass Docker-Container auf Folgendes zugreifen dürfen:

# iptables --list | grep DOCKER
DOCKER-ISOLATION alles - überall überall      
DOCKER alles - überall überall      
Chain DOCKER (1 Referenz)
Chain DOCKER-ISOLATION (1 Referenzen)

Nachdem ich nach einigen Informationen gesucht hatte, stieß ich auf dieses Problem: KEINE ROUTE ZUR HOST-Netzwerkanforderung vom Container an Host-IP:Port, die von einem anderen Container veröffentlicht wurde.

erklären

Wie in den Docker Community Forms erwähnt, handelt es sich um einen bekannten Fehler, bei dem Port 80 auf dem Host von anderen Computern aus zugänglich ist, aber nicht von Docker-Containern auf dem lokalen Computer. Sie müssen Firewall-Regeln einrichten, um den Zugriff von Docker-Containern auf dem lokalen Computer zuzulassen.

gypark wies darauf hin, dass dieses Problem durch das Hinzufügen von Firewall-Regeln in /etc/firewalld/zones/public.xml vermieden werden kann:

<Regelfamilie="ipv4">
  <Quelladresse="172.17.0.0/16" />
  <akzeptieren />
</Regel>

Beachten Sie, dass 172.17.0.0/16 hier mit allen IPs im IP-Segment 172.17.xx.xx übereinstimmen kann.

Starten Sie anschließend die Firewall neu:

systemctl restart firewalld

Danach können Sie innerhalb des Docker-Containers auf Port 80 des Hostcomputers zugreifen.

Andere Probleme

Als ich in der Hoffnung, dieses Problem zu reproduzieren, eine neue VM mit VMware öffnete, stellte ich fest, dass es auf der neuen VM kein ähnliches Problem gab. Das heißt, der Container kann über 172.17.0.1 direkt auf den Host-Port 80 zugreifen, und ich habe beim Überprüfen der Firewall-Konfiguration keine Whitelist für 172.17.xx.xx gesehen.
Es wird vermutet, dass der in der neuen virtuellen Maschine installierte Docker Docker version 1.12.5, build 047e51b/1.12.5 ist, also die von Red Hat aus der Open-Source-Version von Docker entwickelte Version. Die vorherige ist Docker version 17.06.2-ce, build cec0b72 zu Docker-CE gehört. Vielleicht gibt es einen Unterschied in der Docker-Version, und Red Hat hat den bekannten Fehler übrigens behoben.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Docker ermöglicht den nahtlosen Aufruf von Shell-Befehlen zwischen Container und Host
  • Lösung für den Docker-Container, der keine Schreibberechtigung für das Host-Verzeichnis hat
  • Lösung, wenn der Docker-Container nicht auf den Host-Port zugreifen kann
  • Führen Sie die Shell oder das Programm im Docker-Container auf dem Host aus.
  • Aufrufen und Ausführen von Host-Docker-Operationen im Docker-Container
  • So verwenden Sie einen Docker-Container für den Zugriff auf das Host-Netzwerk
  • Lösen Sie das Problem des 8-Stunden-Unterschieds zwischen Docker-Container und Host-Computer

<<:  So beheben Sie den Fehler beim MySQL-Transaktionsvorgang

>>:  React-Beispiel zum Abrufen des Werts aus dem Eingabefeld

Artikel empfehlen

Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann

Entsprechend den wichtigsten Websites und persönl...

Empfohlene Tipps für Web-Frontend-Ingenieure

Lassen Sie uns zunächst über den Wert von Web-Fro...

Linux Überprüfen Sie den Installationsort der Software einfache Methode

1. Überprüfen Sie den Installationspfad der Softw...

Detailliertes Tutorial zur Installation von PHP und Nginx auf Centos7

Da die Anwendung von CentOS auf der Serverseite i...

Definition und Funktion des zoom:1-Attributs in CSS

Heute wurde ich gefragt, wozu das Zoom-Attribut i...

JavaScript implementiert eine verschiebbare Modalbox

In diesem Artikel wird der spezifische JavaScript...

Ein genauerer Blick auf die Unterschiede zwischen Link und @import

Es gibt drei Hauptmethoden, CSS auf einer Seite zu...

So installieren und verwenden Sie Ubuntu Docker

Inhaltsverzeichnis 1. Automatische Installation m...