Konfiguration der primären Netzwerk-Portzuordnung für Docker

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung

Wenn vor dem Start des Docker-Containers keine Portzuordnung durchgeführt wird, kann auf Netzwerkanwendungen und -dienste im Container nicht über das Netzwerk außerhalb des Containers zugegriffen werden. Da einige Netzwerkanwendungen und -dienste häufig in Containern ausgeführt werden, müssen Sie dem Container Ports zuordnen, wenn Sie über das Netzwerk außerhalb des Containers auf die Netzwerkanwendungen und -dienste im Container zugreifen möchten. Zum Zuordnen von Ports können Sie die Option -P oder -p im Befehl „ docker run verwenden.

Zufällige Portzuordnung

Wenn die Portzuordnung über die Option -P im docker run -Befehl durchgeführt wird, ordnet Docker dem vom Container geöffneten Netzwerkport nach dem Zufallsprinzip einen Port zu.

Nehmen wir nginx als Beispiel und ziehen Sie zuerst das nginx -Image.

[root@izoq008ryseuupz ~]# Docker-Image zieht Nginx
Standard-Tag verwenden: latest
aktuellste: Aus Bibliothek/nginx ziehen
852e50cd189d: Existiert bereits 
571d7e852307: Ziehen abgeschlossen 
addb10abd9cb: Pull abgeschlossen 
d20aa7ccdb77: Ziehen abgeschlossen 
8b03f1e11359: Ziehen abgeschlossen 
Zusammenfassung: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Neueres Image für nginx:latest heruntergeladen
docker.io/library/nginx:latest
[root@izoq008ryseuupz ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
nginx latest bc9a0695f571 vor 2 Tagen 133MB

Erstellen Sie dann einen Container nginx.1 mit dem nginx -Image und verwenden Sie die Option -P , um eine zufällige Portzuordnung durchzuführen.

[root@izoq008ryseuupz ~]# docker run -itd -P --name nginx.1 nginx
91e3c7ed957f8196fd631eb7bce21acaa96bc253551303ecba2bf193201284ba

Durch den Befehl docker ps -l können Sie sehen, dass Port 32775 des lokalen Hosts dem Port 80 des Containers zugeordnet ist. Greifen Sie jetzt auf Port 32775 des lokalen Hosts zu, um auf die von der nginx -Anwendung im Container bereitgestellte Schnittstelle zuzugreifen.

[root@izoq008ryseuupz ~]# docker ps -l
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
91e3c7ed957f nginx "/docker-entrypoint.…" vor 17 Minuten 5 Sekunden aktiv 0.0.0.0:32775->80/tcp nginx.1

Bildbeschreibung hier einfügen

Über den Befehl docker logs nginx.1 können Sie den Datensatz der Zugriffe auf die von der nginx -Anwendung im Container bereitgestellte Schnittstelle über den Browser anzeigen.

[root@izoq008ryseuupz ~]# Docker-Protokolle nginx.1
...
111.8.49.168 - - [27/Nov/2020:09:03:53 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/87.0.4280.66 Safari/537.36" "-"
27.11.2020 09:03:53 [Fehler] 21#21: *1 open() "/usr/share/nginx/html/favicon.ico" fehlgeschlagen (2: Keine solche Datei oder kein solches Verzeichnis), Client: 111.8.49.168, Server: localhost, Anfrage: "GET /favicon.ico HTTP/1.1", Host: "ip:32775", Referrer: "http://ip:32775/"
111.8.49.168 - - [27/Nov/2020:09:03:53 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://ip:32775/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/87.0.4280.66 Safari/537.36" "-"

Festlegen der Portzuordnung

Verwenden Sie die Option -p im docker run -Befehl, um die Portzuordnung anzugeben. Ordnen Sie Port 8083 des lokalen Hosts Port 80 des Containers zu.

[root@izoq008ryseuupz ~]# docker run -itd -p 8083:80 --name nginx.2 nginx
0e62792a194559bf33c2b39f70b64133cb89a48846278ccee651fda68aa6dad1
[root@izoq008ryseuupz ~]# docker ps -l
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
0e62792a1945 nginx "/docker-entrypoint.…" vor 6 Sekunden Aktiv seit 5 Sekunden 0.0.0.0:8083->80/tcp nginx.2

Greifen Sie jetzt auf Port 8083 des lokalen Hosts zu, um auf die von der nginx -Anwendung im Container bereitgestellte Schnittstelle zuzugreifen.

Bildbeschreibung hier einfügen

Über den Befehl docker logs nginx.2 können Sie außerdem den Datensatz der Zugriffe auf die von nginx -Anwendung im Container bereitgestellte Schnittstelle über den Browser anzeigen.

[root@izoq008ryseuupz ~]# Docker-Protokolle nginx.2
...
111.8.49.168 - - [27/Nov/2020:09:28:32 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/87.0.4280.66 Safari/537.36" "-"
27.11.2020 09:28:32 [Fehler] 28#28: *1 open() "/usr/share/nginx/html/favicon.ico" fehlgeschlagen (2: Keine solche Datei oder kein solches Verzeichnis), Client: 111.8.49.168, Server: localhost, Anfrage: "GET /favicon.ico HTTP/1.1", Host: "ip:8083", Referrer: "http://ip:8083/"
111.8.49.168 - - [27/Nov/2020:09:28:32 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://ip:8083/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/87.0.4280.66 Safari/537.36" "-"

Durch den Befehl docker ps können Sie sehen, dass sich die Portzuordnungen der beiden zuvor erstellten Container beide auf 0.0.0.0 des lokalen Hosts befinden.

[root@izoq008ryseuupz ~]# Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
0e62792a1945 nginx "/docker-entrypoint.…" vor 7 Minuten Aktiv seit 7 Minuten 0.0.0.0:8083->80/tcp nginx.2
91e3c7ed957f nginx "/docker-entrypoint.…" vor 53 Minuten Aktiv seit 36 ​​Minuten 0.0.0.0:32775->80/tcp nginx.1

Erklärung zu 0.0.0.0 im Internet

Erstens kann 0.0.0.0 nicht ping werden. Auf dem Server ist 0.0.0.0 keine echte IP-Adresse, sondern repräsentiert alle IPv4-Adressen auf dem lokalen Computer. Das Abhören von Port 0.0.0.0 bedeutet das Abhören der Ports aller IPs auf dem lokalen Computer.

C:\Benutzer\Kaven>ping 0.0.0.0

Pingen von 0.0.0.0 mit 32 Byte Daten:
PING: Übertragung fehlgeschlagen. Häufige Fehler.
PING: Übertragung fehlgeschlagen. Häufige Fehler.
PING: Übertragung fehlgeschlagen. Häufige Fehler.
PING: Übertragung fehlgeschlagen. Häufige Fehler.

Ping-Statistik für 0.0.0.0:
  Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust),

Angegebene Portzuordnung für eine angegebene Adresse

Sie können das Format ip:hostPort:containerPort verwenden, um einen angegebenen Port einer angegebenen Adresse zuzuordnen, z. B. 127.0.0.1:8083 .

[root@izoq008ryseuupz ~]# Docker stoppt nginx.2
nginx.2
[root@izoq008ryseuupz ~]# docker run -itd -p 127.0.0.1:8083:80 --name nginx.3 nginx
a20b18b97fa4bf7576f6a0d769394a390cfb64ad5fc895453b548bf3f75105ca
[root@izoq008ryseuupz ~]# docker ps -l
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
a20b18b97fa4 nginx "/docker-entrypoint.…" vor 4 Sekunden Aktiv 4 Sekunden 127.0.0.1:8083->80/tcp nginx.3

Sie können die Portzuordnungsinformationen auch über docker inspect nginx.3 anzeigen.

      "Häfen": {
        "80/tcp": [
          {
            "HostIp": "127.0.0.1",
            "HostPort": "8083"
          }
        ]
      }

Der folgende Befehl kann den Container nicht starten, da er standardmäßig 0.0.0.0 verwendet, weshalb die Fehlermeldung „ address already in use ausgegeben wird.

docker run -itd -p 8083:80 --name nginx.4 nginx
[root@izoq008ryseuupz ~]# docker run -itd -p 8083:80 --name nginx.4 nginx
a5211ec678440044945e4d6f16fe59f3ac10367192262768096e7b748ebd027c
Docker: Fehlerantwort vom Daemon: Treiber konnte externe Konnektivität auf Endpunkt nginx.4 nicht programmieren (809bed1de2bb89f5d54b5b200503701279a153e60dac08b93e13af8c40a02e36): Fehler beim Starten des Userland-Proxys: Listen TCP 0.0.0.0:8083: Bind: Adresse wird bereits verwendet.

Der folgende Befehl kann den Container starten.

docker run -itd -p 127.0.0.2:8083:80 --name nginx.5 nginx
[root@izoq008ryseuupz ~]# docker run -itd -p 127.0.0.2:8083:80 --name nginx.5 nginx
f60dcb586968471e7a8127ccef4cb4e89c4198df748da404f78afaff4afa42de

Über den Befehl docker ps -a können Sie einige Informationen zu allen Containern anzeigen.

[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
f60dcb586968 nginx "/docker-entrypoint.…" vor 19 Sekunden Aktiv seit 18 Sekunden 127.0.0.2:8083->80/tcp nginx.5
a5211ec67844 nginx "/docker-entrypoint.…" vor 2 Minuten Erstellt nginx.4
a20b18b97fa4 nginx "/docker-entrypoint.…" vor 7 Minuten Vor 7 Minuten 127.0.0.1:8083->80/tcp nginx.3
0e62792a1945 nginx "/docker-entrypoint.…" vor 29 Minuten Beendet (0) vor 7 Minuten nginx.2
91e3c7ed957f nginx "/docker-entrypoint.…" Vor etwa einer Stunde Aktiv seit 58 Minuten 0.0.0.0:32775->80/tcp nginx.1

Zufällige Portzuordnung für eine angegebene Adresse

Sie können das Format ip::containerPort verwenden, um einer angegebenen Adresse einen zufälligen Port zuzuordnen, z. B. einen zufälligen Port auf 127.0.0.1 .

[root@izoq008ryseuupz ~]# docker run -itd -p 127.0.0.1::80 --name nginx.6 nginx
396b7d9e64c047187c0391485ba1d275587d86409573e882bc68a9357dfcb6f2
[root@izoq008ryseuupz ~]# docker ps -l
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
396b7d9e64c0 nginx "/docker-entrypoint.…" vor 9 Sekunden Aktiv seit 9 Sekunden 127.0.0.1:32768->80/tcp nginx.6

Sie können sehen, dass Docker Port 32768 von 127.0.0.1 dem Port 80 des Containers zuordnet und dieser Port 32768 von Docker zufällig zugewiesen wird.

Mehrere Portzuordnungen

Verwenden Sie mehrere -p Optionen, um mehrere Ports zuzuordnen.

[root@izoq008ryseuupz ~]# docker run -itd -p 9091:9091 -p 9092:8080 -p 9093:8083 --name nginx.8 nginx
5ac6438dcc2a2d1b7f668eb10d8285085c396a44f896aae0b3dc09935e4e95eb
[root@izoq008ryseuupz ~]# docker ps -l
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
5ac6438dcc2a nginx "/docker-entrypoint.…" vor 6 Sekunden Aktiv seit 4 Sekunden 80/tcp, 0.0.0.0:9091->9091/tcp, 0.0.0.0:9092->8080/tcp, 0.0.0.0:9093->8083/tcp nginx.8

Port-Mapping-Konfiguration anzeigen

docker port -Befehl kann die Portzuordnungskonfiguration des Containers angezeigt werden.

[root@izoq008ryseuupz ~]# Docker-Port nginx.6 80
127.0.0.1:32768
[root@izoq008ryseuupz ~]# Docker-Port nginx.5 80
127.0.0.2:8083
[root@izoq008ryseuupz ~]# Docker-Port nginx.3
80/tcp -> 127.0.0.1:8083
[root@izoq008ryseuupz ~]# Docker-Port nginx.8
8080/tcp -> 0.0.0.0:9092
8083/tcp -> 0.0.0.0:9093
9091/tcp -> 0.0.0.0:9091

Dies ist das Ende der Einführung in die Portzuordnung für Docker-Container.

Dies ist das Ende dieses Artikels über die Konfiguration der primären Netzwerk-Portzuordnung von Docker. Weitere relevante Inhalte zur Docker-Portzuordnung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Docker-Port-Mapping und externe Unzugänglichkeitsprobleme
  • So erreichen Sie Netzwerkzugriff mit Docker-Port-Mapping
  • Docker ermöglicht mehrere Port-Mapping-Befehle
  • Docker-Volumes-Dateizuordnungsmethode
  • Docker-Dateispeicherpfad, Port-Mapping-Betriebsmodus ändern
  • So ändern Sie die Portzuordnung eines laufenden Docker-Containers
  • Docker richtet Port-Mapping ein, kann aber nicht auf die Lösung zugreifen

<<:  Eine Zeile CSS-Code, die Chrome zum Absturz bringt

>>:  JS realisiert den Effekt der Baidu News-Navigationsleiste

Artikel empfehlen

Prinzip der MySQL-Paging-Analyse und Effizienzverbesserung

Prinzip der MySQL-Paging-Analyse und Effizienzver...

Docker+Nextcloud zum Erstellen eines persönlichen Cloud-Speichersystems

1. Docker-Installation und -Start yum installiere...

Details zum JavaScript-Abschluss

Inhaltsverzeichnis 1. Was ist ein Abschluss? 2. D...

Javascript verwendet das Integritätsattribut zur Sicherheitsüberprüfung

Inhaltsverzeichnis 1. Dateien mit Skript-Tags imp...

Detaillierte Erklärung des Vue-Elements plus Mehrsprachenumschaltung

Inhaltsverzeichnis Vorwort Wie wechselt man zwisc...

Vue+Element - benutzerdefinierte Abfragekomponente

In diesem Artikel wird hauptsächlich das Vue-Proj...

JavaScript implementiert den Front-End-Countdown-Effekt

In diesem Artikel wird der spezifische JavaScript...

Einführung in semantische HTML-Tags

In den letzten Jahren war DIV+CSS bei der Website-...

Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?

Personen, die MySQL häufig verwenden, können mit ...

Detaillierte Erklärung zur Verwendung des <meta>-Tags in HTML

Wenn wir möchten, dass mehr Leute die von uns ers...

XHTML verwendet einige veraltete Elemente in HTML nicht mehr

Wenn wir CSS-Webseitenlayouts erstellen, wissen wi...