Docker-Port-Mapping und externe Unzugänglichkeitsprobleme

Docker-Port-Mapping und externe Unzugänglichkeitsprobleme

Der Docker-Container stellt Dienste bereit und lauscht auf Port 8888. Um ihn von außen zugänglich zu machen, ist eine Portzuordnung erforderlich.

docker run -it --rm -p 8888:8888 server:v1

An dieser Stelle tritt ein Problem auf. Nach dem Deployment auf der virtuellen Maschine A ist der Portdienst 8888 in A erreichbar, in B jedoch nicht.

Dies dürfte daran liegen, dass die Anfrage abgefangen wurde.

1. Überprüfen Sie firewall-cmd --state

Wenn die Ausgabe "nicht läuft" lautet, dann läuft FirewallD nicht und alle Schutzrichtlinien sind nicht gestartet. In diesem Fall kann ausgeschlossen werden, dass die Firewall die Verbindung blockiert.

Wenn die Ausgabe „running“ lautet, bedeutet dies, dass FirewallD derzeit ausgeführt wird. Um anzuzeigen, welche Ports und Dienste derzeit geöffnet sind, müssen Sie den folgenden Befehl eingeben:

Firewall-Befehl --list-ports
Firewall-Befehl --list-services

Es gibt zwei Lösungen:

1. Schalten Sie den FirewallD-Dienst aus:

Wenn Sie keine Firewall benötigen, schalten Sie einfach den Dienst FirewallD aus.

systemctl stoppe firewalld.service

2. Fügen Sie eine Richtlinie hinzu, um den angegebenen Port für die Außenwelt zu öffnen:

Wenn wir beispielsweise den externen Port 5000/tcp öffnen möchten, können wir den folgenden Befehl verwenden:

Firewall-Befehl --add-port=5000/tcp --permanent
Firewall-Befehl --reload

Wenn Sie den Port nur temporär öffnen möchten, entfernen Sie den Parameter „--permanent“ in der ersten Zeile des Befehls. Wenn Sie den FirewallD-Dienst dann erneut starten, wird diese Richtlinie ungültig.

2. Die IP-Weiterleitung ist nicht aktiviert

sysctl net.ipv4.ip_forward

Wenn net.ipv4.ip_forward=0 angezeigt wird, ist es nicht aktiviert.

3. Der Dienst iptables ist eingeschaltet und blockiert

Sie können den Dienst iptables deaktivieren

Dienst iptables stoppen

Wenn beim Ausführen von Docker ein Fehler auftritt:

iptables: Keine Kette/Ziel/Übereinstimmung mit diesem Namen.

Starten Sie dann einfach den Docker-Dienst neu

Dienst Docker Neustart

oder:

#Legen Sie die iptables-Firewall als Startelement fest systemctl enable iptables.service

#Starten Sie die Firewall, damit die Konfigurationsdatei wirksam wird systemctl start iptables.service

#Firewall stoppen systemctl stop iptables.service

#Starten Sie die Firewall neu, damit die Konfigurationsdatei wirksam wird. systemctl restart iptables.service

Endgültige Version:

Nachdem Docker gestartet und Ports zugeordnet wurden, fügt Docker DNAT-Regeln in iptables hinzu, um die vom entsprechenden Port empfangenen Pakete in IP zu konvertieren und weiterzuleiten. Gleichzeitig werden Regeln hinzugefügt, um alle IPs aus der Docker-Domäne zu konvertieren.

Unter Centos7 kann Docker jedoch normal auf das externe Netzwerk zugreifen, aber die vom externen Netzwerk gesendete Anforderung kann nach dem Empfang und der Weiterleitung durch eth1 nicht an Docker0 übermittelt werden, oder sie wird übermittelt, aber die Situation (oui Unknown) tritt auf. Es ist unklar, warum die Daten nach DNAT nicht an Docker0 übermittelt werden können.

Die endgültige Lösung besteht darin, iptables nach dem Start von Docker neu zu starten

Dienst iptables neu starten

Löschen Sie alle vom Docker hinzugefügten Regeln und fügen Sie dann Regeln hinzu

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

Ersetzen Sie die IP-Adresse aller Pakete 172.17.0.0/16 von Docker durch die lokale IP-Adresse und senden Sie sie, um den Zweck zu erreichen, dass Docker auf das externe Netzwerk zugreift.

Dies ist das Ende dieses Artikels über Docker-Port-Mapping und externe Unzugänglichkeit. Weitere Informationen zu Docker-Port-Mapping und externem Zugriff finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So ändern Sie die Portzuordnung eines laufenden Docker-Containers
  • Fehlerbehebungsprozess für Docker-Container, bei dem nach der Portzuordnung plötzlich keine Verbindung mehr hergestellt werden kann
  • Fügen Sie die Portzuordnung hinzu, nachdem der Docker-Container gestartet wurde
  • So legen Sie die Portzuordnung zum Ausführen von Containern in Docker fest
  • Demonstration und Analyse von vier Portzuordnungen von Docker-Containern

<<:  Wie löst Vue das domänenübergreifende Problem des Axios-Request-Frontends?

>>:  Webdesign-Tipps für Formular-Eingabefelder

Artikel empfehlen

Node-Skript realisiert automatische Anmelde- und Lotteriefunktion

Inhaltsverzeichnis 1. Einleitung 2. Vorbereitung ...

CSS löst das Fehlausrichtungsproblem von Inline-Blöcken

Schluss mit Unsinn, Postleitzahl HTML-Teil <di...

Konfigurationsprozess für die MySQL-Master-Slave-Replikation

Konfiguration der Hauptbibliothek 1. Konfiguriere...

Einführung und Beispiele für versteckte Felder in HTML

Grundlegende Syntax: <Eingabetyp="versteck...

Detaillierte Erläuterung der MySQL-Datenbankisolationsebene und des MVCC

Inhaltsverzeichnis 1. Isolationsstufe LESEN SIE U...

Detaillierte Erläuterung der Angular-Strukturdirektivenmodule und -Stile

Inhaltsverzeichnis 1. Strukturelle Anweisungen Mo...

JavaScript-Interview: So implementieren Sie die Methode zur Array-Abflachung

Inhaltsverzeichnis 1. Was ist Array-Flattening? 2...

Die Verwendung von FrameLayout in sechs Layouts

Vorwort In der letzten Ausgabe haben wir Ihnen Li...

MySQL-Anweisungsanordnung und zusammenfassende Einführung

SQL-Anweisungen (Structured Query Language), also...

So verwenden Sie die Glog-Protokollbibliothek in einer Linux-Umgebung

Linux-Bibliothek generieren Die Linux-Version ver...

Details zum Lazy Loading im Vue-Routing

Inhaltsverzeichnis 1. Was ist Lazy Loading von Ro...

Verbesserung der Aktualisierungsfunktion für Zen-Codierungsressourcen

Offizielle Website: http://code.google.com/p/zen-c...