So konfigurieren Sie die Portweiterleitung für Docker unter CentOS 7, damit sie mit der Firewall kompatibel ist

So konfigurieren Sie die Portweiterleitung für Docker unter CentOS 7, damit sie mit der Firewall kompatibel ist

Wenn wir unter CentOS 7 den Host-Port mit einem Befehl ähnlich dem folgenden dem Container-Port zuordnen, kann es vorkommen, dass wir nicht auf den Container-Dienst zugreifen können.

docker run --name web_a -p 192.168.1.250:803:80 -d web_a:beta1.0.0 .

Wenn Docker diesen Befehl ausführt, fügt es eine Regel in iptables ein, um Host-Port 803 dem Container-Port 80 zuzuordnen. In CentOS 7 wird iptables jedoch durch den Dienst firewalld ersetzt. Daher wird die Portzuordnung im obigen Befehl nicht wirksam.

Lösung: Überprüfen Sie zunächst die Netzwerkkarteninformationen auf dem Host und bestätigen Sie, dass eine virtuelle Netzwerkkarte von Docker0 hinzugefügt wurde:

[root@localhost /home]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 172.17.0.1 Netzmaske 255.255.0.0 Broadcast 172.17.255.255
    inet6 fe80::42:5cff:fe0e:82f9 Präfixlänge 64 Bereichs-ID 0x20<link>
    Ether 02:42:5c:0e:82:f9 txqueuelen 0 (Ethernet)
    RX-Pakete 1288 Bytes 1561177 (1,4 MiB)
    RX-Fehler 0 verloren 0 Überläufe 0 Frame 0
    TX-Pakete 1594 Bytes 108755 (106,2 KiB)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.1.250 Netzmaske 255.255.255.0 Broadcast 192.168.1.255
    inet6 fe80::76f4:9aea:4973:ec6c Präfixlänge 64 Bereichs-ID 0x20<Link>
    inet6 240e:379:542:2800:8844:77ba:78dd:7 Präfixlänge 128 Bereichs-ID 0x0<global>
    inet6 240e:379:542:2811:3ead:218:ba68:38e6 Präfixlänge 64 Bereichs-ID 0x0<global>
    Ether 74:d4:35:09:93:19 txqueuelen 1000 (Ethernet)
    RX-Pakete 10166908 Bytes 1221399579 (1,1 GiB)
    RX-Fehler 0 verloren 3014 Überläufe 0 Frame 0
    TX-Pakete 982334 Bytes 427296782 (407,5 MiB)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0
    Geräteunterbrechung 18

lo: Flags = 73 <UP, LOOPBACK, RUNNING> mtu 65536
    inet 127.0.0.1 Netzmaske 255.0.0.0
    inet6 ::1 Präfixlänge 128 Bereichs-ID 0x10<Host>
    loop txqueuelen 1000 (Lokaler Loopback)
    RX-Pakete 1833650 Bytes 450567722 (429,6 MiB)
    RX-Fehler 0 verloren 0 Überläufe 0 Frame 0
    TX-Pakete 1833650 Bytes 450567722 (429,6 MiB)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0

vethecef228: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet6 fe80::f425:f1ff:fe82:9c19 Präfixlänge 64 Bereichs-ID 0x20<link>
    Ether f6:25:f1:82:9c:19 txqueuelen 0 (Ethernet)
    RX-Pakete 234 Bytes 1520113 (1,4 MiB)
    RX-Fehler 0 verloren 0 Überläufe 0 Frame 0
    TX-Pakete 613 Bytes 39809 (38,8 KiB)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0

Verwenden Sie den folgenden Befehl, um die von der Containerinstanz erhaltene virtuelle IP zu bestätigen:

Docker-Inspektion von Web_A

Angenommen, die IP im Container ist 172.17.0.2, erstellen wir eine NAT-Weiterleitungsregel für diese IP und überlassen die Handhabung dieser Regel dem Firewalld-Dienst:

#Host-Port-Anforderung wird an den Container weitergeleitet (der Dienst im Container sollte nicht auf localhost, sondern auf die vom Container zugewiesene virtuelle IP hören oder diese durch 0.0.0.0 ersetzen)
firewall-cmd --permanent --zone=public --add-masquerade Port-NAT-Weiterleitung aktivieren #Leitet die Anforderung von Host-Port 803 an Port 80 im Container weiter firewall-cmd --add-forward-port=port=803:proto=tcp:toaddr=172.17.0.2:toport=80 --permanent
#Regeln neu laden firewall-cmd --reload
#Alle Regeln auflisten firewall-cmd --list-all
öffentlich (aktiv)
 Ziel: Standard
 icmp-block-inversion: nein
 Schnittstellen: enp2s0
 Quellen:
 Dienste: SSH DHCPv6-Client
 Anschlüsse: 3306/TCP 80/TCP 21/TCP 5000/TCP 6379/TCP 900/TCP 801/TCP 802/TCP 6000/TCP 5002/TCP 90/TCP 9092/TCP 81/TCP 803/TCP
 Protokolle:
 Maskerade: ja
 Weiterleitungsports: Port=803:Proto=TCP:Toport=80:Toaddr=172.17.0.2
 Quellports:
 ICMP-Blöcke:
 Reiche Regeln:
#Docker neu starten
systemctl Neustart Docker
#Starten Sie den Container Docker Start Web_a neu

Nach den obigen Vorgängen können Sie auf den Dienst auf Port 80 im Container mit der Host-IP: 803 zugreifen, und Firewalld muss nicht heruntergefahren werden (viele Schlussfolgerungen im Internet deuten darauf hin, dass es durch den Dienst iptables ersetzt werden soll, in tatsächlichen Tests ist dies jedoch nicht erforderlich).

Zusammenfassen

Dies ist das Ende dieses Artikels zum Konfigurieren der Portweiterleitung für Docker unter CentOS 7, damit sie mit der Firewall kompatibel ist. Weitere Informationen zum Konfigurieren der Portweiterleitung für Docker, damit sie mit der Firewall kompatibel ist, 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:
  • Fehlerbehebungsprozess für Docker-Container, bei dem nach der Portzuordnung plötzlich keine Verbindung mehr hergestellt werden kann
  • So binden Sie einen Docker-Container an eine externe IP und einen externen Port
  • 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
  • Detaillierte Erklärung der dynamischen Zuordnung laufender Container-Ports durch Docker
  • Docker-Port-Mapping im Detail

<<:  Vertikales und horizontales Aufteilen von MySQL-Tabellen

>>:  So stellen Sie mit C++ eine Verbindung zu MySQL her

Artikel empfehlen

Implementierung des Imports und Exports von Vue-Element-Admin-Projekten

vue-element-admin importiert Komponentenkapselung...

js Canvas realisiert zufällige Partikeleffekte

In diesem Artikelbeispiel wird der spezifische Co...

CocosCreator - modulares Lernskript

Modulares Cocos Creator-Skript Mit Cocos Creator ...

Eine kurze Zusammenfassung aller Kapselungsmethoden in Vue

Inhaltsverzeichnis 1. Kapselungs-API 2. Globale T...

MySQL-Reihe von Erfahrungszusammenfassungen und Analyse-Tutorials zu NULL-Werten

Inhaltsverzeichnis 1. Testdaten 2. Die Unannehmli...

Zusammenfassung der Browserkompatibilität gängiger CSS-Eigenschaften (empfohlen)

Warum müssen wir die Browserkompatibilität von CS...

Detaillierte Einführung in das MySQL-Schlüsselwort Distinct

Einführung in die Verwendung des MySQL-Schlüsselw...

CSS3 zum Erzielen eines dynamischen Hintergrundverlaufseffekts

Beim Erlernen von CSS3 geht es mehr darum, sich m...