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

Nginx Reverse-Proxy-Konfiguration entfernt Präfix

Wenn Sie nginx als Reverse-Proxy verwenden, könne...

Teilen Sie einen auf Ace basierenden Markdown-Editor

Ich denke, Editoren lassen sich in zwei Kategorie...

So implementieren Sie die Größenanpassung mobiler Webseiten

Ich habe das vorliegende Projekt endlich abgeschl...

So fügen Sie Docker dynamisch Ports hinzu, ohne das Image neu zu erstellen

Manchmal müssen Sie während des Betriebs freigege...

So verwenden Sie den Skeleton-Bildschirm im Vue-Projekt

Heutzutage ist die Anwendungsentwicklung grundsät...

Teilen Sie 8 MySQL-Fallstricke, die Sie erwähnen müssen

MySQL ist einfach zu installieren, schnell und ve...

Detaillierte Erläuterung der MySQL 8.0-Wörterbuchtabellenerweiterung

Das Datenwörterbuch in MySQL ist eine der wichtig...

Native JavaScript-Karussell-Implementierungsmethode

In diesem Artikel wird die Implementierungsmethod...

Zusammenfassung gängiger MySQL-DDL-Operationen

Bibliotheksverwaltung Erstellen einer Bibliothek ...