So starten Sie den Docker-Dienst neu

DockerDockerBeginner
Jetzt üben

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

Einführung

Docker ist eine leistungsstarke Containerisierungsplattform, die es Entwicklern ermöglicht, Anwendungen effizient bereitzustellen und zu verwalten. Das Verständnis, wie Docker-Dienste neu gestartet werden, ist entscheidend für die Aufrechterhaltung der Systemstabilität und die Behebung potenzieller Konfigurations- oder Leistungsprobleme. Dieses Tutorial bietet eine umfassende Anleitung zum Neustarten von Docker-Diensten in verschiedenen Szenarien und Betriebssystemen. In diesem Lab lernen Sie, wie Sie den Docker-Daemon und einzelne Container neu starten und die Auswirkungen verschiedener Neustartmethoden verstehen.

Neustarten des Docker-Daemons

Der Docker-Daemon ist der Hintergrundprozess, der Docker-Objekte wie Images, Container, Netzwerke und Volumes verwaltet. Das Neustarten des Docker-Daemons ist oft notwendig, nachdem Konfigurationsänderungen vorgenommen wurden oder um Probleme zu beheben, die die gesamte Docker-Umgebung betreffen.

In diesem Schritt lernen Sie, wie Sie den Docker-Daemon mit systemd-Befehlen neu starten.

Überprüfen wir zunächst den aktuellen Status des Docker-Dienstes.

sudo systemctl status docker

Sie sollten eine Ausgabe sehen, die angibt, ob der Docker-Dienst aktiv ist und ausgeführt wird.

Output of checking Docker service status

Starten wir nun den Docker-Dienst neu. Dadurch werden alle vom Daemon verwalteten, laufenden Container gestoppt und der Daemon anschließend neu gestartet.

sudo systemctl restart docker

Nachdem der Befehl abgeschlossen ist, überprüfen Sie den Status erneut, um zu bestätigen, dass der Docker-Dienst erfolgreich neu gestartet wurde.

sudo systemctl status docker

Sie sollten sehen, dass der Dienst neu gestartet wurde und aktiv ist.

Alternativ können Sie den Docker-Dienst auch separat stoppen und starten. Stoppen Sie zuerst den Dienst:

sudo systemctl stop docker

Überprüfen Sie den Status, um zu bestätigen, dass er inaktiv ist:

sudo systemctl status docker

Starten Sie dann den Dienst:

sudo systemctl start docker

Überprüfen Sie abschließend den Status noch einmal, um sicherzustellen, dass er aktiv ist:

sudo systemctl status docker

Das Neustarten des Docker-Daemons ist eine grundlegende Operation zur Verwaltung Ihrer Docker-Umgebung. Es ist wichtig zu wissen, dass diese Aktion alle laufenden Container stoppt.

Neustarten einzelner Container

Während das Neustarten des gesamten Docker-Daemons alle Container betrifft, müssen Sie oft nur einen bestimmten Container neu starten. Dies ist nützlich, um containerspezifische Konfigurationsänderungen anzuwenden, Probleme mit einer einzelnen Anwendung zu beheben oder einfach einen Dienst neu zu starten, der in einem Container ausgeführt wird.

In diesem Schritt lernen Sie, wie Sie einzelne Docker-Container neu starten.

Lassen Sie uns zunächst ein einfaches Nginx-Image herunterladen (pull) und einen Container ausführen.

docker pull nginx
docker run -d --name my-nginx -p 80:80 nginx

Dieser Befehl lädt das nginx-Image herunter, führt einen Container namens my-nginx im Hintergrundmodus (-d) aus und ordnet Port 80 auf dem Host Port 80 auf dem Container zu (-p 80:80).

Überprüfen Sie, ob der Container ausgeführt wird:

docker ps

Sie sollten den Container my-nginx mit dem Status Up aufgelistet sehen.

Starten wir nun den Container my-nginx neu.

docker restart my-nginx

Dieser Befehl sendet ein Stoppsignal an den Container, wartet, bis er ordnungsgemäß beendet wurde, und startet ihn dann neu. Standardmäßig wartet Docker 10 Sekunden, bis der Container beendet ist, bevor er ihn zwangsweise beendet (kill).

Überprüfen Sie den Containerstatus erneut:

docker ps

Der Container sollte weiterhin als Up aufgeführt sein, aber die Spalte STATUS zeigt an, dass er neu gestartet wurde (z. B. Up X seconds).

Sie können auch ein Timeout für den Neustartvorgang mit dem Flag -t angeben. Um beispielsweise 5 Sekunden zu warten:

docker restart -t 5 my-nginx

Dies ist nützlich, wenn Sie Ihrer Anwendung mehr oder weniger Zeit geben müssen, um sauber herunterzufahren.

Das Neustarten einzelner Container bietet eine detaillierte Kontrolle über Ihre Anwendungen, ohne andere laufende Container oder den Docker-Daemon selbst zu beeinträchtigen.

Konfigurieren von Container-Neustartrichtlinien (Restart Policies)

Docker ermöglicht es Ihnen, Neustartrichtlinien (restart policies) für Container zu konfigurieren. Eine Neustartrichtlinie bestimmt, ob ein Container nach dem Beenden automatisch vom Docker-Daemon neu gestartet werden soll. Dies ist eine entscheidende Funktion, um die Verfügbarkeit Ihrer Anwendungen sicherzustellen.

In diesem Schritt lernen Sie, wie Sie Neustartrichtlinien für Docker-Container konfigurieren.

Stoppen und entfernen wir zunächst den vorherigen my-nginx-Container, um neu zu beginnen.

docker stop my-nginx
docker rm my-nginx

Führen wir nun einen neuen Nginx-Container mit der Neustartrichtlinie always aus.

docker run -d --name my-nginx-always --restart=always -p 80:80 nginx

Das Flag --restart=always weist Docker an, den Container immer neu zu starten, wenn er stoppt, unabhängig vom Exit-Code. Er startet den Container auch neu, wenn der Docker-Daemon startet.

Überprüfen Sie, ob der Container ausgeführt wird:

docker ps

Simulieren wir nun einen Containerausfall, indem wir ihn manuell stoppen.

docker stop my-nginx-always

Warten Sie einige Sekunden und überprüfen Sie dann den Containerstatus erneut:

docker ps

Sie sollten sehen, dass der Container my-nginx-always automatisch vom Docker-Daemon neu gestartet wurde. Die Spalte STATUS zeigt an, dass er seit kurzer Zeit Up ist.

Weitere gängige Neustartrichtlinien sind:

  • no: Den Container nicht automatisch neu starten (Standard).
  • on-failure: Den Container nur neu starten, wenn er mit einem Exit-Code ungleich Null beendet wird (was auf einen Fehler hinweist). Optional können Sie die maximale Anzahl der Neustartversuche angeben (z. B. on-failure:5).
  • unless-stopped: Den Container immer neu starten, es sei denn, er wird explizit vom Benutzer gestoppt oder der Docker-Daemon wird gestoppt.

Probieren wir die Richtlinie on-failure aus. Stoppen und entfernen Sie den aktuellen Container:

docker stop my-nginx-always
docker rm my-nginx-always

Führen Sie einen neuen Container mit der Richtlinie on-failure aus:

docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx

Überprüfen Sie, ob er ausgeführt wird:

docker ps

Simulieren wir nun einen Fehler. Wir können dies tun, indem wir einen Befehl innerhalb des Containers ausführen, der mit einem Status ungleich Null beendet wird.

docker exec my-nginx-on-failure sh -c "exit 1"

Überprüfen Sie den Containerstatus nach einigen Sekunden:

docker ps

Der Container sollte automatisch neu gestartet worden sein, da er mit einem Status ungleich Null beendet wurde.

Neustartrichtlinien sind ein leistungsstarkes Werkzeug, um die Ausfallsicherheit Ihrer containerisierten Anwendungen zu gewährleisten. Durch die Konfiguration der entsprechenden Richtlinie können Sie die Wiederherstellung von Containern automatisieren, die unerwartet stoppen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den Docker-Daemon und einzelne Container neu starten. Sie haben verschiedene Methoden zum Neustarten des Daemons mithilfe von systemd-Befehlen untersucht und gelernt, wie Sie bestimmte Container mithilfe des Befehls docker restart neu starten. Darüber hinaus haben Sie die Neustartrichtlinien (restart policies) von Docker kennengelernt und erfahren, wie Sie diese konfigurieren, um Container basierend auf verschiedenen Bedingungen automatisch neu zu starten und so die Verfügbarkeit Ihrer Anwendungen zu verbessern. Diese Fähigkeiten sind grundlegend für die effektive Verwaltung und Fehlerbehebung von Docker-Umgebungen.