Wie man den docker container wait-Befehl verwendet, um auf Container-Stopp zu warten

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 container wait effektiv einsetzen. Dieser Befehl ist ein leistungsfähiges Werkzeug für Skripting und Automatisierung, da er die Ausführung anhält, bis ein bestimmter Container beendet wurde.

Sie beginnen damit, einen Docker-Container im Hintergrund mit dem Detached-Modus (-d) zu starten. Anschließend verwenden Sie docker container wait, um Ihr Terminal zu blockieren, bis dieser Hintergrundcontainer seine Ausführung beendet. Um das Blockierverhalten zu demonstrieren, stoppen Sie den Container von einem separaten Terminal aus. Abschließend beobachten Sie den Exit-Code, der vom docker container wait-Befehl zurückgegeben wird, und verstehen, wie er den Beendigungsstatus des Containers signalisiert.


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/stop("Stop Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555128{{"Wie man den docker container wait-Befehl verwendet, um auf Container-Stopp zu warten"}} docker/ps -.-> lab-555128{{"Wie man den docker container wait-Befehl verwendet, um auf Container-Stopp zu warten"}} docker/stop -.-> lab-555128{{"Wie man den docker container wait-Befehl verwendet, um auf Container-Stopp zu warten"}} docker/pull -.-> lab-555128{{"Wie man den docker container wait-Befehl verwendet, um auf Container-Stopp zu warten"}} end

Container im Hintergrund starten

In diesem Schritt lernen Sie, wie Sie einen Docker-Container im Hintergrund starten. Das Ausführen eines Containers im Hintergrund ermöglicht es, dass dieser ohne Belegung Ihres Terminals arbeitet, was besonders für langlebige Dienste oder Anwendungen nützlich ist.

Zuerst laden wir das alpine-Image. Dies ist ein sehr kleines Linux-Distributions-Image, das sich gut für Tests eignet.

docker pull alpine

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Nun starten wir einen alpine-Container im Hintergrund mit dem -d-Flag. Das -d-Flag steht für "Detached Mode". Wir führen außerdem einen einfachen Befehl im Container aus, sleep 30, wodurch der Container 30 Sekunden läuft, bevor er beendet wird.

docker run -d alpine sleep 30

Nach Ausführung dieses Befehls gibt Docker die vollständige Container-ID aus.

<container_id>

Um zu überprüfen, ob der Container im Hintergrund läuft, können Sie den Befehl docker ps verwenden. Dieser Befehl listet alle aktuell laufenden Container auf.

docker ps

Sie sollten eine ähnliche Ausgabe sehen, die Ihren alpine-Container als laufend anzeigt:

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
<container_id>   alpine    "sleep 30"    X seconds ago   Up X seconds             <container_name>

Die Spalte STATUS sollte Up gefolgt von der Laufzeit des Containers anzeigen. Dies bestätigt, dass der Container im Detached-Modus läuft.

Verwendung von docker container wait zum Blockieren bis zum Container-Stopp

In diesem Schritt lernen Sie, wie Sie den Befehl docker container wait verwenden. Dieser Befehl blockiert die Ausführung, bis ein oder mehrere Container gestoppt werden, und gibt anschließend deren Exit-Codes aus. Dies ist nützlich, wenn Sie auf den Abschluss eines Hintergrundprozesses in einem Container warten müssen, bevor Sie mit anderen Aufgaben fortfahren.

Zuerst rufen wir die ID des Containers ab, den wir im vorherigen Schritt gestartet haben. Mit docker ps -q erhalten wir nur die Container-ID des laufenden Containers.

docker ps -q

Dieser Befehl gibt die Container-ID aus. Kopieren Sie diese ID, da Sie sie für den nächsten Befehl benötigen.

<container_id>

Verwenden Sie nun den Befehl docker container wait gefolgt von der soeben erhaltenen Container-ID.

docker container wait <container_id>

Wenn Sie diesen Befehl ausführen, scheint Ihr Terminal zu hängen. Dies ist das erwartete Verhalten. Der Befehl docker container wait blockiert die Ausführung, bis der angegebene Container stoppt. Da der Container aktuell den Befehl sleep 30 ausführt, wartet dieser Befehl bis zu 30 Sekunden auf den Abschluss des Containers.

Sobald der Container stoppt (entweder durch Abschluss des sleep 30-Befehls oder manuelles Stoppen), gibt der docker container wait-Befehl den Exit-Code des Containers aus.

Beispielsweise sehen Sie bei erfolgreichem Stopp nach 30 Sekunden:

0

Ein Exit-Code von 0 zeigt typischerweise an, dass der Befehl im Container erfolgreich abgeschlossen wurde.

Lassen Sie dieses Terminalfenster geöffnet, da wir im nächsten Schritt mit diesem wartenden Befehl interagieren werden.

Container in einem anderen Terminal stoppen

In diesem Schritt öffnen Sie ein neues Terminal und stoppen den laufenden Container. Dies demonstriert, wie docker container wait im ersten Terminal reagiert, wenn der Container extern gestoppt wird.

Öffnen Sie ein neues Terminalfenster in der LabEx-Umgebung. Dies können Sie normalerweise durch Klicken auf das "+"-Symbol oder durch Auswahl von "New Terminal" im Menü tun.

In diesem neuen Terminal müssen wir den laufenden Container erneut identifizieren. Verwenden Sie docker ps, um laufende Container aufzulisten und die Container-ID zu finden.

docker ps

Sie sehen eine ähnliche Ausgabe wie im vorherigen Schritt, die Container-ID, Image, Befehl usw. anzeigt.

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
<container_id>   alpine    "sleep 30"    X minutes ago   Up X minutes             <container_name>

Verwenden Sie nun den Befehl docker stop gefolgt von der Container-ID, um den Container zu stoppen.

docker stop <container_id>

Sie sollten die Container-ID als Bestätigung im Terminal sehen, was anzeigt, dass der Stop-Befehl erfolgreich war.

<container_id>

Wechseln Sie zurück zum ersten Terminalfenster, in dem Sie docker container wait ausgeführt haben. Sie sollten beobachten, dass der docker container wait-Befehl nun abgeschlossen ist und einen Exit-Code ausgegeben hat. Diesen Exit-Code werden wir im nächsten Schritt untersuchen.

Exit-Code von docker container wait analysieren

In diesem letzten Schritt untersuchen wir den Exit-Code, der vom docker container wait-Befehl im ersten Terminal ausgegeben wurde.

Wechseln Sie zurück zum ersten Terminalfenster, in dem Sie den Befehl docker container wait <container_id> ausgeführt haben.

Sie sollten eine Zahl in der Zeile nach dem Befehl sehen. Diese Zahl stellt den Exit-Code des Containers dar.

137

Im vorherigen Schritt haben Sie den Container mit docker stop gestoppt. Wenn ein Container mit docker stop beendet wird, sendet Docker zunächst ein SIGTERM-Signal an den Hauptprozess im Container und nach einer Wartezeit ein SIGKILL-Signal, falls der Prozess nicht beendet wurde. Ein Exit-Code von 137 zeigt typischerweise an, dass ein Prozess durch ein SIGKILL-Signal beendet wurde (128 + 9, wobei 9 die Signalnummer für SIGKILL ist).

Dies demonstriert, dass docker container wait nicht nur auf das Stoppen des Containers wartet, sondern auch den Exit-Code liefert, der Aufschluss über die Beendigungsursache gibt. Hätte der Container seinen sleep 30-Befehl normal beendet, wäre der Exit-Code 0 gewesen.

Sie können überprüfen, ob der Container gestoppt wurde, indem Sie in einem der Terminalfenster docker ps -a ausführen. Das Flag -a zeigt alle Container an, einschließlich der beendeten.

docker ps -a

Sie sollten Ihren alpine-Container in der Liste sehen, dessen Status Exited (<exit_code>) lautet.

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
<container_id>   alpine    "sleep 30"    X minutes ago    Exited (137) X seconds ago             <container_name>

Damit schließen wir das Lab zur Verwendung von docker container wait. Sie haben gelernt, wie man:

  1. Einen Container im Hintergrund startet
  2. Mit docker container wait auf dessen Beendigung wartet
  3. Ihn von einem anderen Terminal aus stoppt
  4. Den resultierenden Exit-Code analysiert

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man einen Docker-Container im Hintergrund mit dem -d-Flag und dem docker run-Befehl startet und dessen Status mit docker ps überprüft. Sie haben außerdem den docker container wait-Befehl kennengelernt und verstanden, dass dieser die Ausführung blockiert, bis ein bestimmter Container stoppt, und anschließend dessen Exit-Code zurückgibt.