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:
|
<<: Vertikales und horizontales Aufteilen von MySQL-Tabellen
>>: So stellen Sie mit C++ eine Verbindung zu MySQL her
vue-element-admin importiert Komponentenkapselung...
translate(-50%,-50%)-Attribute: Verschieben Sie e...
Inhaltsverzeichnis Bereitstellung mehrerer Anwend...
In diesem Artikelbeispiel wird der spezifische Co...
Ich möchte die Installations- und Konfigurationsm...
Modulares Cocos Creator-Skript Mit Cocos Creator ...
Inhaltsverzeichnis 1. Kapselungs-API 2. Globale T...
Inhaltsverzeichnis 1. Testdaten 2. Die Unannehmli...
Warum müssen wir die Browserkompatibilität von CS...
Einführung in die Verwendung des MySQL-Schlüsselw...
Beim Erlernen von CSS3 geht es mehr darum, sich m...
Was ist k3d? k3d ist ein kleines Programm zum Aus...
Designabsichten Beim Entwickeln einer Seite müsse...
Finden Sie das Problem Wenn wir den Inhalt in ein...
Vorbereitung: 192.168.16.128 192.168.16.129 Zwei ...