Wie man den docker container stop Befehl verwendet, um Container ordnungsgemäß zu stoppen

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 Docker-Container ordnungsgemäß mit dem Befehl docker container stop beenden. Wir beginnen mit der Erstellung und Ausführung eines einfachen Containers. Anschließend untersuchen Sie, wie Container mit dem Standardsignal und Timeout gestoppt werden, und lernen dann, wie Sie das Timeout und das Signal zum Stoppen von Containern anpassen können. Diese praktische Übung vermittelt Ihnen wertvolle Fähigkeiten für die effektive Verwaltung des Lebenszyklus Ihrer Docker-Container.


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-555124{{"Wie man den docker container stop Befehl verwendet, um Container ordnungsgemäß zu stoppen"}} docker/ps -.-> lab-555124{{"Wie man den docker container stop Befehl verwendet, um Container ordnungsgemäß zu stoppen"}} docker/stop -.-> lab-555124{{"Wie man den docker container stop Befehl verwendet, um Container ordnungsgemäß zu stoppen"}} docker/pull -.-> lab-555124{{"Wie man den docker container stop Befehl verwendet, um Container ordnungsgemäß zu stoppen"}} end

Erstellen und Ausführen eines einfachen Containers

In diesem Schritt lernen Sie, wie Sie einen einfachen Docker-Container erstellen und ausführen. Ein Container ist eine standardisierte Softwareeinheit, die Code und alle seine Abhängigkeiten verpackt, damit die Anwendung schnell und zuverlässig in verschiedenen Rechenumgebungen läuft.

Zuerst laden wir ein einfaches Image von Docker Hub. Wir verwenden das hello-world-Image, ein sehr kleines Image, das lediglich eine Nachricht ausgibt und sich beendet.

docker pull hello-world

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

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

Nachdem wir das Image haben, können wir einen Container basierend auf diesem Image ausführen. Verwenden Sie den Befehl docker run:

docker run hello-world

Wenn Sie diesen Befehl ausführen, erstellt Docker einen neuen Container aus dem hello-world-Image. Der Container führt den im Image definierten Befehl aus, der in diesem Fall eine Nachricht auf der Konsole ausgibt.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Diese Ausgabe bestätigt, dass Ihre Docker-Installation funktioniert und Sie Ihren ersten Container erfolgreich ausgeführt haben. Der Container hat das hello-world-Programm ausgeführt und sich dann beendet.

Um die ausgeführten Container anzuzeigen, einschließlich der beendeten, können Sie den Befehl docker ps -a verwenden:

docker ps -a

Sie sollten den hello-world-Container mit dem Status Exited aufgelistet sehen.

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

Die Ausgabe zeigt die Container-ID, das zugrunde liegende Image, den ausgeführten Befehl, den Erstellungszeitpunkt, den aktuellen Status und den zugewiesenen Namen.

Container mit Standardsignal und Timeout stoppen

In diesem Schritt lernen Sie, wie Sie einen laufenden Docker-Container mit dem Standardsignal und Timeout stoppen. Wenn Sie einen Container stoppen, sendet Docker ein Signal an den Hauptprozess im Container. Standardmäßig sendet Docker das SIGTERM-Signal, das den Prozess anweist, sich ordnungsgemäß zu beenden. Falls der Prozess nicht innerhalb des Standard-Timeout-Zeitraums (normalerweise 10 Sekunden) beendet wird, sendet Docker ein SIGKILL-Signal, um den Prozess zwangsweise zu terminieren.

Zuerst starten wir einen Container, der aktiv bleibt. Wir verwenden das ubuntu-Image und führen einen einfachen Befehl aus, der den Container am Laufen hält.

docker pull ubuntu

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

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

Nun führen wir den ubuntu-Container im Detached-Modus (-d) aus, sodass er im Hintergrund läuft, und führen einen Befehl aus, der ihn dauerhaft aktiv hält (z.B. tail -f /dev/null).

docker run -d ubuntu tail -f /dev/null

Dieser Befehl gibt die Container-ID aus.

<container_id>

Sie können überprüfen, ob der Container läuft, indem Sie den Befehl docker ps verwenden:

docker ps

Sie sollten den ubuntu-Container mit dem Status Up sehen.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

Nun stoppen wir diesen laufenden Container mit dem Befehl docker stop. Sie können entweder die Container-ID oder den Containernamen verwenden. Ersetzen Sie <container_id> durch die tatsächliche ID Ihres laufenden Containers.

docker stop <container_id>

Der Befehl gibt die ID des gestoppten Containers aus.

<container_id>

Nach Ausführung des docker stop-Befehls erhält der Container das SIGTERM-Signal. Docker wartet das Standard-Timeout (10 Sekunden) ab, damit sich der Container ordnungsgemäß beenden kann. Falls er innerhalb dieser Zeit nicht stoppt, wird SIGKILL gesendet.

Sie können überprüfen, ob der Container gestoppt wurde, indem Sie erneut docker ps ausführen.

docker ps

Der ubuntu-Container sollte nicht mehr in der Ausgabe von docker ps erscheinen (die nur laufende Container anzeigt). Um alle Container einschließlich der gestoppten zu sehen, verwenden Sie docker ps -a.

docker ps -a

Sie sollten den ubuntu-Container mit dem Status Exited sehen.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             <container_name>

Dies bestätigt, dass der Container erfolgreich mit dem Standardsignal und Timeout gestoppt wurde.

Container mit benutzerdefiniertem Timeout stoppen

In diesem Schritt lernen Sie, wie Sie einen laufenden Docker-Container mit einem individuellen Timeout für die ordnungsgemäße Beendigung stoppen. Dies ist nützlich, wenn Ihre Anwendung mehr oder weniger Zeit für einen sauberen Shutdown benötigt, bevor Docker sie zwangsweise beendet.

Wir verwenden dasselbe ubuntu-Image und denselben Befehl wie im vorherigen Schritt, um einen dauerhaft aktiven Container zu starten.

Zuerst führen wir den ubuntu-Container im Detached-Modus (-d) mit dem Befehl tail -f /dev/null aus:

docker run -d ubuntu tail -f /dev/null

Dieser Befehl gibt die Container-ID aus.

<container_id>

Überprüfen Sie mit docker ps, ob der Container läuft:

docker ps

Sie sollten den ubuntu-Container mit dem Status Up sehen.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

Nun stoppen Sie den Container mit dem Befehl docker stop, diesmal jedoch mit einem spezifischen Timeout über das Flag -t oder --time. Setzen wir das Timeout auf 5 Sekunden. Ersetzen Sie <container_id> durch die tatsächliche ID Ihres laufenden Containers.

docker stop -t 5 <container_id>

Der Befehl gibt die ID des gestoppten Containers aus.

<container_id>

Bei Verwendung von docker stop -t 5 sendet Docker das SIGTERM-Signal und wartet 5 Sekunden auf die Beendigung des Containers. Falls der Container nach 5 Sekunden noch läuft, sendet Docker das SIGKILL-Signal.

Überprüfen Sie mit docker ps -a, ob der Container gestoppt wurde:

docker ps -a

Sie sollten den ubuntu-Container mit dem Status Exited sehen.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             <container_name>

Sie haben den Container erfolgreich mit einem benutzerdefinierten Timeout von 5 Sekunden gestoppt.

Container mit benutzerdefiniertem Signal stoppen

In diesem Schritt lernen Sie, wie Sie einen laufenden Docker-Container durch Senden eines spezifischen Signals anstelle des Standard-SIGTERM stoppen. Dies kann nützlich sein für Anwendungen, die für bestimmte Signale konfiguriert sind, um einen geordneten Shutdown oder andere Aktionen durchzuführen.

Wir verwenden erneut das ubuntu-Image und den Befehl tail -f /dev/null, um einen Container am Laufen zu halten.

Starten Sie den ubuntu-Container im Detached-Modus (-d):

docker run -d ubuntu tail -f /dev/null

Dieser Befehl gibt die Container-ID aus.

<container_id>

Überprüfen Sie mit docker ps, ob der Container läuft:

docker ps

Sie sollten den ubuntu-Container mit dem Status Up sehen.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

Nun stoppen Sie den Container mit dem Befehl docker stop und geben ein benutzerdefiniertes Signal über das Flag --signal an. Beispielsweise senden wir direkt das SIGKILL-Signal. Ersetzen Sie <container_id> durch die tatsächliche ID Ihres laufenden Containers.

docker stop --signal SIGKILL <container_id>

Der Befehl gibt die ID des gestoppten Containers aus.

<container_id>

Bei Verwendung von docker stop --signal SIGKILL sendet Docker das SIGKILL-Signal sofort an den Hauptprozess im Container. Dieses Signal kann vom Prozess nicht abgefangen oder ignoriert werden, daher wird der Prozess zwangsweise ohne eine geordnete Beendigungsphase terminiert.

Überprüfen Sie mit docker ps -a, ob der Container gestoppt wurde:

docker ps -a

Sie sollten den ubuntu-Container mit dem Status Exited sehen.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (137) About a minute ago             <container_name>

Beachten Sie, dass der Exit-Code möglicherweise abweicht (z.B. 137), wenn ein Container mit SIGKILL gestoppt wird, da dies auf eine nicht ordnungsgemäße Beendigung hinweist.

Sie haben den Container erfolgreich durch Senden eines benutzerdefinierten Signals gestoppt.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Schritte für die Arbeit mit Docker-Containern gelernt. Sie begannen damit, ein einfaches Image (hello-world) von Docker Hub zu pullen und anschließend einen Container basierend auf diesem Image auszuführen. Dies veranschaulichte den grundlegenden Prozess der Erstellung und Ausführung eines Containers, und Sie überprüften den erfolgreichen Abschluss durch Überprüfung des Container-Status mit docker ps -a.

Die nachfolgenden Schritte, obwohl im bereitgestellten Inhalt nicht vollständig detailliert, hätten Sie durch den Prozess des Stoppens laufender Container mit dem Befehl docker container stop geführt. Dies hätte das Verständnis des Standardsignals und des Timeouts für das Stoppen umfasst, sowie die Möglichkeit, sowohl die Timeout-Dauer als auch das an den Container gesendete Signal anzupassen, um einen ordnungsgemäßen Shutdown zu erreichen.