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

Einführung und detaillierte Verwendung von React Fragment

Inhaltsverzeichnis Vorwort Motivation für Fragmen...

So installieren Sie Docker CE auf Ubuntu 18.04 (Community Edition)

Deinstallieren Sie alte Versionen Sollten Sie zuv...

Verkürzen Sie die Seiten-Rendering-Zeit, damit die Seite schneller läuft

Wie kann die Seiten-Rendering-Zeit im Browser so ...

Import-, Export-, Sicherungs- und Migrationsvorgänge für Docker-Images

Export: docker save -o centos.tar centos:latest #...

Eine kurze Erläuterung der Syntax der VUE-Uni-App-Vorlage

1.v-bind (Abkürzung:) Um in Daten definierte Date...

Erläuterung der neuen Funktion von Hadoop 2.X, der Papierkorbfunktion

Durch Aktivieren der Papierkorbfunktion können Si...

25 Tipps und Tricks zur Div+CSS-Programmierung

1. Das ul-Tag hat in Mozilla standardmäßig einen ...

Lösung für Verbindungsfehler beim MySQL-Server 5.5

Die Lösung für das Problem, dass MySQL keine Verb...

Beispiel für die Implementierung von QR-Code-Scaneffekten mit CSS3

Online-Vorschau https://jsrun.pro/AafKp/ Erster B...

CentOS7 verwendet yum zur Installation von MySQL 8.0.12

In diesem Artikel werden die detaillierten Schrit...