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

Einige Erfahrungen in der Selbstkultivierung von Künstlern

Da der Einfluss des Unternehmens wächst und seine...

Beispielcode zur Implementierung von Dreiecken und Pfeilen durch CSS-Rahmen

1. CSS-Boxmodell Die Box beinhaltet: Rand, Rahmen...

Grafisches Installationstutorial für MySQL 8.0.17

In diesem Artikel finden Sie das grafische Tutori...

Implementierungsprozess des Lupeneffekts im Javascript-Beispielprojekt

Inhaltsverzeichnis Vorwort Fall: Nachahmung des L...

js zur Realisierung eines Web-Musikplayers

Dieser Artikel enthält einfachen HTML- und Musikp...

Einführung in die Verwendung von Unicode-Zeichen in Webseiten (&#, \u usw.)

Die ersten Computer konnten nur ASCII-Zeichen ver...

So überwachen Sie mehrere JVM-Prozesse in Zabbix

1. Szenariobeschreibung: Unsere Umgebung verwende...

Implementierung der MySQL-Mehrversions-Parallelitätskontrolle MVCC

Einstellungen für die Transaktionsisolationsebene...

So ermitteln Sie die Höhe des MySQL InnoDB B+-Baums

Vorwort Der Grund, warum die InnoDB-Engine von My...

Analyse der Informationsarchitektur von Facebook

<br />Original: http://uicom.net/blog/?p=762...