Wie man den docker compose port-Befehl verwendet, um gemappte Ports zu finden

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker port verwenden, um den öffentlichen Port zu ermitteln, der einem Docker-Service zugeordnet ist. Wir beginnen mit der Erstellung eines einfachen Services mit Port-Mapping unter Verwendung des nginx-Images.

Nach der Erstellung des Services werden Sie untersuchen, wie Sie den öffentlichen Port für den gesamten Service, für ein bestimmtes Protokoll und für einen bestimmten Container-Index innerhalb des Services finden. Diese praktische Erfahrung wird Ihnen die Fähigkeiten vermitteln, programmatisch die exponierten Ports für Ihre Docker-Container zu identifizieren.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555085{{"Wie man den docker compose port-Befehl verwendet, um gemappte Ports zu finden"}} docker/ps -.-> lab-555085{{"Wie man den docker compose port-Befehl verwendet, um gemappte Ports zu finden"}} docker/port -.-> lab-555085{{"Wie man den docker compose port-Befehl verwendet, um gemappte Ports zu finden"}} docker/pull -.-> lab-555085{{"Wie man den docker compose port-Befehl verwendet, um gemappte Ports zu finden"}} docker/images -.-> lab-555085{{"Wie man den docker compose port-Befehl verwendet, um gemappte Ports zu finden"}} end

Erstellen eines einfachen Services mit Port-Mapping

In diesem Schritt lernen wir, wie man mit Docker einen einfachen Service erstellt und einen Port vom Container auf den Host-Rechner mappt. Dies ermöglicht externen Zugriff auf den im Container laufenden Service.

Zuerst laden wir das nginx-Image von Docker Hub. Dieses Image enthält einen leichtgewichtigen Webserver, den wir für unser Beispiel verwenden können.

docker pull nginx

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird. Sobald der Download abgeschlossen ist, können Sie überprüfen, ob das Image lokal verfügbar ist, indem Sie die Images auflisten:

docker images

Nun starten wir einen Container basierend auf dem nginx-Image und mappen Port 80 des Containers auf Port 8080 des Host-Rechners. Das Flag -d startet den Container im Detached-Modus (im Hintergrund), und das Flag -p 8080:80 führt das Port-Mapping durch.

docker run -d -p 8080:80 nginx

Dieser Befehl startet einen Nginx-Webserver innerhalb eines Docker-Containers und macht ihn auf Port 8080 Ihrer LabEx-VM zugänglich.

Um zu überprüfen, ob der Container läuft und das Port-Mapping funktioniert, können Sie den Befehl docker ps verwenden, um laufende Container aufzulisten. Suchen Sie nach dem Container, der das nginx-Image ausführt, und prüfen Sie die Spalte PORTS. Dort sollte 0.0.0.0:8080->80/tcp stehen.

docker ps

Schließlich können Sie die Nginx-Willkommensseite aufrufen, indem Sie mit curl eine Anfrage an localhost auf Port 8080 senden.

curl localhost:8080

Sie sollten den HTML-Inhalt der standardmäßigen Nginx-Willkommensseite in der Ausgabe sehen. Dies bestätigt, dass der Container läuft und über den gemappten Port erreichbar ist.

Öffentlichen Port für den Service ermitteln

Im vorherigen Schritt haben wir einen Docker-Container erstellt und einen Port vom Container auf den Host gemappt. Nun lernen wir, wie man programmatisch den öffentlichen Port findet, auf dem ein Service verfügbar gemacht wird. Dies ist besonders nützlich, wenn Sie sich nicht mehr genau erinnern können, welchen Host-Port Sie dem internen Container-Port zugeordnet haben.

Der Befehl docker port ist speziell für diesen Zweck entwickelt worden. Er zeigt die Port-Mappings für einen bestimmten Container an. Sie müssen die Container-ID oder den Namen als Argument angeben.

Zuerst ermitteln wir die Container-ID des laufenden Nginx-Containers. Sie können dazu docker ps verwenden und die Ausgabe filtern oder einfach die ID aus der Ausgabe des docker ps-Befehls aus dem vorherigen Schritt kopieren.

docker ps

Suchen Sie den Container, der das nginx-Image ausführt, und notieren Sie sich dessen Container-ID.

Verwenden Sie nun den Befehl docker port gefolgt von der Container-ID, um die Port-Mappings anzuzeigen.

docker port [CONTAINER_ID]

Ersetzen Sie [CONTAINER_ID] mit der tatsächlichen ID Ihres Nginx-Containers.

Die Ausgabe zeigt den internen Port des Containers und den entsprechenden Host-Port, auf den er gemappt ist. Beispielsweise sollten Sie etwas sehen wie 80/tcp -> 0.0.0.0:8080. Dies bedeutet, dass der interne Port 80 des Containers (mit TCP-Protokoll) auf Port 8080 aller Host-Schnittstellen (0.0.0.0) gemappt ist.

Dieser Befehl bietet eine schnelle Möglichkeit, den öffentlichen Port zu bestimmen, ohne die vollständige Container-Konfiguration untersuchen zu müssen.

Öffentlichen Port für ein bestimmtes Protokoll ermitteln

Im vorherigen Schritt haben wir docker port verwendet, um alle Port-Mappings eines Containers anzuzeigen. Manchmal kann ein Container mehrere Ports mit unterschiedlichen Protokollen (wie TCP und UDP) verfügbar machen. In diesem Schritt lernen wir, wie man den öffentlichen Port für ein bestimmtes Protokoll findet.

Der Befehl docker port ermöglicht es, den internen Container-Port und das gewünschte Protokoll anzugeben. Das Format lautet docker port [CONTAINER_ID] [CONTAINER_PORT]/[PROTOCOL].

Lassen Sie uns den öffentlichen Port für den internen Port 80 des Nginx-Containers mit dem TCP-Protokoll finden. Stellen Sie zunächst sicher, dass Sie die Container-ID aus dem vorherigen Schritt haben. Falls nicht, können Sie sie erneut mit docker ps abrufen.

docker ps

Verwenden Sie nun den docker port-Befehl mit der Container-ID sowie dem spezifischen Port und Protokoll:

docker port [CONTAINER_ID] 80/tcp

Ersetzen Sie [CONTAINER_ID] mit der tatsächlichen ID Ihres Nginx-Containers.

Die Ausgabe sollte direkt den Host-Port anzeigen, der dem internen Port 80 des Containers für das TCP-Protokoll zugeordnet ist, z.B. 0.0.0.0:8080. Dies ist spezifischer als die einfache Ausführung von docker port [CONTAINER_ID], die alle Mappings auflisten würde.

Dies ist besonders nützlich, wenn ein Container denselben Port für verschiedene Protokolle verfügbar macht und Sie nur das Mapping für eines davon benötigen.

Öffentlichen Port für einen bestimmten Container-Index ermitteln

In einigen fortgeschrittenen Szenarien kann ein Container denselben internen Port mehrfach verfügbar machen, wobei dieser möglicherweise verschiedenen Host-Ports oder Schnittstellen zugeordnet ist. Obwohl dies für einfache Dienste wie Nginx weniger üblich ist, ist es möglich. In solchen Fällen kann der docker port-Befehl mehrere Mappings für einen einzelnen internen Port zurückgeben.

Um ein bestimmtes Mapping abzurufen, wenn mehrere existieren, können Sie einen Index verwenden. Die Ausgabe von docker port für einen bestimmten internen Port ist eine Liste von Mappings. Sie können auf ein bestimmtes Mapping über seinen Index zugreifen, beginnend bei 0.

Nehmen wir zu Demonstrationszwecken an, dass unser Nginx-Container mehrere Mappings für Port 80 hätte. Um das erste Mapping (Index 0) zu erhalten, würden Sie das folgende Befehlsformat verwenden:

docker port [CONTAINER_ID] [CONTAINER_PORT]/[PROTOCOL]/[INDEX]

In unserem Nginx-Beispiel würden Sie folgenden Befehl verwenden, um das erste Mapping für den internen Port 80/TCP zu erhalten:

docker port [CONTAINER_ID] 80/tcp/0

Ersetzen Sie [CONTAINER_ID] mit der tatsächlichen ID Ihres Nginx-Containers.

Da unser Nginx-Container nur ein Mapping für Port 80/tcp hat, wird dieser Befehl dieselbe Ausgabe liefern wie docker port [CONTAINER_ID] 80/tcp, nämlich 0.0.0.0:8080.

Obwohl dieses spezifische Nginx-Beispiel die volle Funktionalität der Indizierung nicht zeigt (da nur ein Mapping existiert), ist das Verständnis dieser Funktion wichtig für komplexere Container-Konfigurationen, in denen mehrere Mappings für denselben internen Port existieren können.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man einen einfachen Docker-Service mit Port-Mapping erstellt, indem wir ein Nginx-Image heruntergeladen, einen Container gestartet und den Container-Port 80 auf den Host-Port 8080 gemappt haben. Wir haben den Status des Containers und das Port-Mapping mit docker ps überprüft und die Erreichbarkeit durch einen curl-Aufruf des gemappten Host-Ports bestätigt.

Anschließend haben wir untersucht, wie man programmatisch den öffentlichen Port für einen Service mit dem docker port-Befehl findet. Dies ist besonders nützlich, wenn der Host-Port nicht explizit bekannt ist. Dieser Befehl ermöglicht es uns, den Host-Port abzurufen, der dem internen Port eines Containers entspricht.