Wie man den docker container restart Befehl zur Container-Verwaltung nutzt

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 effektiv mit dem Befehl docker restart verwalten. Sie beginnen mit dem grundlegenden Prozess des Neustarts eines laufenden Containers, einer grundlegenden Operation zur Anwendung von Änderungen oder zur Problembehebung.

Darauf aufbauend werden Sie fortgeschrittenere Neustart-Optionen erkunden. Dazu gehört die Angabe eines benutzerdefinierten Timeouts für den Neustartprozess, wodurch Sie steuern können, wie lange Docker wartet, bis ein Container ordnungsgemäß beendet wird, bevor eine erzwungene Terminierung erfolgt. Abschließend lernen Sie, wie Sie einen Container mit einem spezifischen Signal neu starten, was eine präzise Steuerung des Shutdown-Verhaltens des Containers während eines Neustarts ermöglicht.


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/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555119{{"Wie man den docker container restart Befehl zur Container-Verwaltung nutzt"}} docker/ps -.-> lab-555119{{"Wie man den docker container restart Befehl zur Container-Verwaltung nutzt"}} docker/start -.-> lab-555119{{"Wie man den docker container restart Befehl zur Container-Verwaltung nutzt"}} docker/stop -.-> lab-555119{{"Wie man den docker container restart Befehl zur Container-Verwaltung nutzt"}} docker/restart -.-> lab-555119{{"Wie man den docker container restart Befehl zur Container-Verwaltung nutzt"}} docker/pull -.-> lab-555119{{"Wie man den docker container restart Befehl zur Container-Verwaltung nutzt"}} end

Einen laufenden Container neu starten

In diesem Schritt lernen Sie, wie Sie einen laufenden Docker-Container neu starten. Das Neustarten eines Containers ist eine häufige Operation, wenn Sie Konfigurationsänderungen anwenden, Probleme beheben oder einfach den Zustand des Containers aktualisieren möchten.

Zuerst laden wir ein einfaches Nginx-Image für unsere Beispiele. Wir verwenden das Image nginx:latest.

docker pull nginx:latest

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

Als nächstes starten wir einen Container basierend auf diesem Image. Wir führen ihn im Detached-Modus (-d) aus, damit er im Hintergrund läuft, und weisen ihm einen Namen zu (--name my-nginx).

docker run -d --name my-nginx nginx:latest

Dieser Befehl startet den Nginx-Container und gibt dessen Container-ID aus.

Um zu überprüfen, ob der Container läuft, können Sie den Befehl docker ps verwenden.

docker ps

Sie sollten den Container my-nginx mit dem Status Up in der Liste sehen.

Nun starten wir den laufenden Container mit dem Befehl docker restart gefolgt vom Containernamen neu.

docker restart my-nginx

Dieser Befehl stoppt den Container und startet ihn anschließend erneut.

Um zu bestätigen, dass der Container neu gestartet wurde und wieder läuft, verwenden Sie erneut docker ps.

docker ps

Sie sollten den Container my-nginx erneut in der Liste sehen, und die Spalte STATUS sollte Up mit einer Zeitangabe anzeigen, die darauf hinweist, dass er kürzlich gestartet wurde.

Container mit spezifischem Timeout neu starten

In diesem Schritt lernen Sie, wie Sie einen Docker-Container mit einem spezifischen Timeout neu starten. Wenn Sie einen Container neu starten, sendet Docker ein Stopp-Signal (standardmäßig SIGTERM) an den Hauptprozess im Container. Falls der Prozess nicht innerhalb eines bestimmten Zeitraums beendet wird, sendet Docker ein Kill-Signal (SIGKILL), um ihn zwangsweise zu stoppen. Der Standard-Timeout beträgt 10 Sekunden. Sie können diesen Timeout mit dem Flag -t oder --time beim Befehl docker restart anpassen.

Verwenden wir den my-nginx-Container aus dem vorherigen Schritt. Stellen Sie zunächst sicher, dass er läuft.

docker ps

Falls der Container nicht läuft, starten Sie ihn erneut:

docker start my-nginx

Nun starten wir den Container mit einem Timeout von 5 Sekunden neu. Das bedeutet, Docker wartet 5 Sekunden nach dem Senden des Stopp-Signals, bevor es das Kill-Signal sendet.

docker restart -t 5 my-nginx

Sie sollten den Containernamen ausgegeben sehen, was die Ausführung des Restart-Befehls bestätigt.

Um den Effekt des Timeouts zu beobachten, bräuchten Sie normalerweise einen Container, der länger als die standardmäßigen 10 Sekunden für einen sauberen Shutdown benötigt. Für diese Übung konzentrieren wir uns jedoch auf die Befehlsyntax.

Versuchen wir einen Neustart mit einem längeren Timeout von 20 Sekunden.

docker restart --time 20 my-nginx

Erneut wird der Containername ausgegeben.

Die Option -t oder --time ist nützlich, wenn Sie Anwendungen in Containern ausführen, die mehr Zeit für Aufräumarbeiten vor dem Herunterfahren benötigen.

Um zu bestätigen, dass der Container nach dem Neustart noch läuft, verwenden Sie docker ps.

docker ps

Sie sollten my-nginx mit dem Status Up in der Liste sehen.

Container mit spezifischem Signal neu starten

In diesem Schritt lernen Sie, wie Sie einen Docker-Container neu starten, indem Sie ein spezifisches Signal an den Hauptprozess des Containers senden. Während docker restart standardmäßig ein Stopp-Signal (SIGTERM) gefolgt von einem Kill-Signal (SIGKILL) nach einem Timeout sendet, müssen Sie möglicherweise ein anderes Signal senden, abhängig von der im Container laufenden Anwendung. Dies können Sie erreichen, indem Sie den Container zunächst mit einem spezifischen Signal über docker stop stoppen und ihn dann mit docker start erneut starten.

Verwenden wir wieder den my-nginx-Container. Stellen Sie sicher, dass er läuft.

docker ps

Falls er nicht läuft, starten Sie ihn:

docker start my-nginx

Nun werden wir den Container stoppen, indem wir das SIGKILL-Signal senden. Dieses Signal beendet den Prozess sofort, ohne ihm die Möglichkeit zu geben, Aufräumarbeiten durchzuführen.

docker stop -s SIGKILL my-nginx

Sie sollten den Containernamen ausgegeben sehen, und wenn Sie docker ps ausführen, sollte der Container nicht mehr aufgeführt sein.

docker ps

Der Container ist nun gestoppt. Um ihn neu zu starten, starten wir ihn einfach erneut.

docker start my-nginx

Der Container sollte nun wieder laufen. Überprüfen Sie dies mit docker ps.

docker ps

Sie sollten my-nginx mit dem Status Up in der Liste sehen.

Während SIGKILL ein erzwungener Stopp ist, können Sie auch andere Signale wie SIGHUP oder SIGINT senden, falls Ihre Anwendung dafür konfiguriert ist, um ordnungsgemäße Shutdowns oder Reloads durchzuführen. Die Standardkonfiguration des nginx-Containers verarbeitet jedoch SIGTERM ordnungsgemäß.

Lassen Sie uns den Container erneut stoppen, diesmal mit dem standardmäßigen SIGTERM-Signal (welches das Standard-Signal für docker stop ist, wenn kein Signal angegeben wird).

docker stop my-nginx

Überprüfen Sie, dass er gestoppt wurde:

docker ps

Starten Sie ihn nun ein letztes Mal.

docker start my-nginx

Verifizieren Sie, dass er läuft:

docker ps

Durch die Kombination von docker stop -s <signal> und docker start haben Sie eine feinere Kontrolle darüber, wie ein Container vor dem Neustart gestoppt wird.

Zusammenfassung

In diesem Lab haben Sie den grundlegenden Prozess zum Neustarten eines laufenden Docker-Containers mit dem Befehl docker restart kennengelernt. Sie haben geübt, ein Docker-Image zu pullen, einen Container im Detached-Modus zu starten, seinen Status zu überprüfen und ihn anschließend erfolgreich neu zu starten.

Darüber hinaus haben Sie untersucht, wie Sie den Neustart-Prozess steuern können, indem Sie mit dem Flag -t oder --time eine Timeout-Periode festlegen. Dies ermöglicht es Ihnen, die Zeit anzupassen, die Docker wartet, bis ein Container ordnungsgemäß gestoppt wird, bevor er zwangsweise beendet wird.