So starten Sie Docker neu

In diesem Artikel erfahren Sie, wie Sie den Docker-Daemon und Docker-Container über die Befehlszeile (CLI) neu starten können. Für diese Anleitung verwenden wir einen BlueVPS NVMe-bKVM-Server mit 4 GB RAM. Wir gehen davon aus, dass alle Befehle als root-Benutzer ausgeführt werden.

Wann sollten Sie den Docker-Daemon oder einen Docker-Container neu starten?

Starten Sie den Docker-Daemon neu, wenn Sie die Docker-Engine oder den Systemkern aktualisiert haben, die Docker-CLI nicht reagiert (eingefroren ist) oder Sie die Einstellungen in /etc/docker/daemon.json geändert haben (z. B. Speichertreiber, Protokolltreiber oder benutzerdefinierte Registries).

Starten Sie einen Docker-Container neu, wenn eine Anwendung innerhalb des Containers eingefroren ist, verzögert reagiert oder abgestürzt ist; wenn Sie eine Konfigurationsdatei der Anwendung geändert haben oder Dateivolumes für den Container eingebunden haben.

Den Docker-Daemon neu starten

Um Docker neu zu starten, müssen Sie lediglich einen einfachen Befehl ausführen, und schon sind Sie startklar:

systemctl restart docker

Bitte beachten Sie, dass systemctl restart docker standardmäßig alle Ihre laufenden Container neu startet. Sie können dies mit folgendem Befehl überprüfen:

docker info | grep "Live Restore"

Zeigt die Ausgabe dagegen Live Restore Enabled: true an (das ist nicht die Standardeinstellung), bleiben Ihre Container beim Neustart des Daemons aktiv. Mit diesem Befehl aktivieren Sie „Live Restore“. Achtung: tee überschreibt eine vorhandene daemon.json; ergänzen Sie bestehende Einstellungen in diesem Fall lieber manuell.

tee /etc/docker/daemon.json <<EOF
{
 "live-restore": true
}
EOF
systemctl reload docker

Mit diesem Befehl deaktivieren Sie „Live Restore“ wieder (die Container werden dann beim Neustart des Daemons ebenfalls neu gestartet):

tee /etc/docker/daemon.json <<EOF
{
 "live-restore": false
}
EOF
systemctl reload docker

Einen Docker-Container neu starten

Bevor Sie einen Container neu starten, sollten Sie dessen Namen oder ID ermitteln. Führen Sie den folgenden Befehl aus, um Ihre Container anzuzeigen:

docker ps

In der Ausgabe sehen Sie Ihre Container; Sie können sie anhand der CONTAINER ID oder des Namens (NAMES) neu starten. Starten wir beispielsweise „httpd“ zunächst anhand seines Namens und anschließend anhand seiner Container-ID neu:

docker restart httpd
docker restart 997f9dd62538

In der Spalte STATUS von docker ps sehen Sie anschließend, dass der Container neu gestartet wurde und erst seit wenigen Sekunden läuft (z. B. „Up 1 second“).

Einen Container automatisch neu starten

Docker verfügt über Richtlinien zum Neustart von Containern beim Beenden oder beim Neustart von Docker selbst, sodass Sie keinen separaten Prozessmanager benötigen. Es gibt vier Neustartrichtlinien:

  • no – den Container nicht neu starten (Standard).
  • on-failure[:max-retries] – den Container bei einem Fehler neu starten; die Anzahl der Versuche lässt sich begrenzen.
  • always – den Container immer neu starten, wenn er stoppt.
  • unless-stopped – den Container immer neu starten, es sei denn, Sie haben ihn manuell gestoppt.

Hier finden Sie Befehlsbeispiele für alle vier Neustartrichtlinien:

docker run -d --restart=no httpd
docker run -d --restart=on-failure:3 httpd
docker run -d --restart=always httpd
docker run -d --restart=unless-stopped httpd

Fazit

Zu wissen, wann und wie man Docker-Container neu startet, spart Zeit und verhindert unnötige Ausfallzeiten:

  • Verwenden Sie systemctl restart docker für Kern-Updates und Konfigurationsänderungen.
  • Verwenden Sie docker restart <Name/ID>, um eine bestimmte nicht mehr reagierende Anwendung schnell wiederherzustellen.
  • Legen Sie bei der Bereitstellung geeignete Neustartrichtlinien (--restart) fest, um die Wiederherstellung von Containern zu automatisieren.

Vergessen Sie nicht, sich unsere VPS-Server anzusehen!

Blog