- Nutzung der nativen Neustartrichtlinien von Docker zur Behandlung von Systemausfällen.
- Implementierung von benutzerdefinierten Skripten und Cronjobs für Container mit fehlerhaften Zuständen.
- Erweiterte Integration mit systemd zur Steuerung der Start- und Abschaltsequenz.
- Externe Monitoring-Alternativen und -Tools wie beispielsweise Podman Quadlet.
Das ist Ihnen sicher auch schon passiert: Sie haben einen Dienst, der in Docker welches aus unerklärlichen Gründen alle paar Tage stecken bleibt. Wie kann ein Docker-Container automatisch neu gestartet werden, wenn er nicht mehr reagiert? Es ist frustrierend, Code oder Konfigurationen zu optimieren und festzustellen, dass nichts funktioniert, nur um dann zu merken, dass ein einfacher manueller Neustart das Problem löst und alles für eine weitere Woche am Laufen hält. Anstatt ständig die Uhrzeit zu überprüfen, ist die ideale Lösung, ein System einzurichten, das diese lästige Arbeit für Sie erledigt.
Die Verwaltung der Containerverfügbarkeit umfasst mehr als nur die Gewährleistung, dass sie beim Einschalten des Servers automatisch starten. sicherstellen, dass sie richtig reagieren auf die Anfragen. Manchmal scheint der Container für Docker „aktiv“ zu sein, aber die darin enthaltene Anwendung reagiert nicht, was uns zwingt, nach Lösungen zu suchen, die von grundlegenden Daemon-Parametern bis hin zur Erstellung komplexer Dienste im Betriebssystem reichen.
Docker-native Neustartrichtlinien
Der einfachste Weg, einen Docker-Container automatisch neu zu starten, ist die Verwendung des Flags. --restart beim Starten eines Containers oder bei Verwendung des Befehls docker update Wenn der Container bereits erstellt ist, bietet Docker je nach Bedarf verschiedene Optionen an. Zum Beispiel die Richtlinie stets Dies führt dazu, dass der Container immer neu gestartet wird, unabhängig davon, ob der Prozess mit einem Fehler beendet wurde oder ob der Docker-Daemon selbst neu gestartet wurde.
Wenn Sie eine chirurgischere Methode bevorzugen, es sei denn, es wird gestoppt Dies ist für viele die beste Wahl. Diese Konfiguration ist identisch mit der vorherigen, außer dass, wenn Sie den Container manuell zu Wartungszwecken stoppen, Docker wird nicht versuchen, es einzuschalten. automatisch nach einem Serverneustart, unter Berücksichtigung Ihrer manuellen Entscheidung.
Für diejenigen, die nur auf kritische Fehler reagieren wollen, gibt es im FehlerfallDiese Richtlinie löst nur dann einen Neustart aus, wenn der Container mit einem Exit-Code ungleich null beendet wird. Sie können dies sogar einschränken, indem Sie eine maximale Anzahl von Wiederholungsversuchen festlegen, um zu verhindern, dass das System in eine Endlosschleife gerät, falls der Fehler hartnäckig und kritisch ist.

Automatisierung für "ungesunde" Container
Hier wird es interessant. Manchmal wird ein Container noch als „Aktiv“ (eingeschaltet) angezeigt, aber sein Gesundheitsstatus ist … ungesund weil es interne Prüfungen nicht besteht. Bisherige Richtlinien sind hier wirkungslos, da der Prozess technisch gesehen nicht abgebrochen ist. Um dies zu beheben, können wir die Richtlinie implementieren. GESUNDHEITSCHECK in der Dockerfile oder in der Docker Compose-Datei, wodurch ein Befehl definiert wird (z. B. ein curl an einen bestimmten Port), um zu überprüfen, ob die App antwortet.
Sobald der Gesundheitscheck eingerichtet ist, können wir einen erstellen Bash-Skript das alle paar Minuten ausgeführt wird crontab von Linux. Dieses Skript soll Container herausfiltern, die sich in einem bestimmten Zustand befinden. unhealthy oder diejenigen, die mit dem Fehlercode 128 beendet wurden und einen docker restart über sie.
Damit dies reibungslos funktioniert und ein Docker-Container automatisch neu gestartet wird, ist es unerlässlich, dass der Benutzer, der den Cron-Job ausführt, über die erforderlichen Berechtigungen verfügt. Berechtigungen, die in der Docker-Gruppe erforderlich sindAuf diese Weise überwacht das System die Umgebung alle 5 oder 10 Minuten und stellt alle Dienste wieder her, die zu „Zombie“-Diensten geworden sind, wodurch eine nahezu vollständige Verfügbarkeit ohne menschliches Eingreifen gewährleistet wird.
Erweiterte Integration mit systemd
Bei der Arbeit in professionelleren Umgebungen möchten Sie möglicherweise, dass sich Ihre Container wie folgt verhalten native Linux-DiensteIntegrieren Docker Systemd ermöglicht die Verwaltung komplexer Abhängigkeiten, beispielsweise die Sicherstellung, dass die Datenbank vor der Webanwendung gestartet wird. Dies wird durch das Erstellen von Dateien erreicht. .service in der Route /etc/systemd/system/.
Wir können ein Design entwickeln Aus- und Einschaltsequenz Kontrolliert. Mithilfe von benutzerdefinierten, mit systemd verknüpften Skripten können Container in umgekehrter Reihenfolge ihrer Abhängigkeiten gestoppt werden, um Datenbeschädigung zu verhindern. oneshot und die Konfiguration der targets geeignet (wie zum Beispiel multi-user.target o shutdown.targetDer Server übernimmt den gesamten Lebenszyklus des Containers.
Eine weitere leistungsstarke Option zum automatischen Neustart eines Docker-Containers, wenn dieser nicht mehr reagiert, ist die Verwendung des Flags. --rm in Kombination mit systemd. Dies ermöglicht es, den Container beim Beenden zu entfernen und beim Neustart einen neuen aus dem Basis-Image zu erstellen, wodurch sichergestellt wird, dass Der Behälter muss stets sauber und unverändert sein.Die Datenspeicherung wird ausschließlich an externe Datenträger delegiert.

Externe Werkzeuge und moderne Alternativen
Wer keine Bash-Skripte schreiben möchte, kann auf Drittanbieter-Tools zurückgreifen. Es gibt Open-Source-Anwendungen, die speziell für den Neustart von Containern entwickelt wurden. festgelegter ZeitplanDies ist sehr nützlich für wiederkehrende Aufgaben wie die Erneuerung von SSL-Zertifikaten. Ebenso sind Tools wie … Uptime Kuma Sie ermöglichen die Überwachung des Zustands von Diensten über ein visuelles Dashboard und den Versand von Benachrichtigungen an Telegram oder Gotify, falls ein Problem auftritt. Sie sind alle sehr hilfreich, um einen Docker-Container automatisch neu zu starten, wenn er nicht mehr reagiert.
Für alle, die eine leichtere oder einheimische Alternative suchen, Podman Es ist eine hervorragende Option. Dank seiner daemonlosen Architektur und Funktionalität von QuadlettEs ermöglicht die Erstellung einfacher deklarativer Dateien, die systemd automatisch in optimierte Dienste umwandelt und bietet so eine wesentlich organischere Integration als das herkömmliche Docker.
Die vollständige Kontrolle über den Lebenszyklus Ihrer Dienste erfordert die Kombination der Nutzung von Neustartrichtlinienständige Überwachung durch Gesundheitschecks und in komplexeren Fällen die Unterstützung von systemd oder Überwachungstools damit Ihre Infrastruktur robust ist und nicht davon abhängt, dass jemand jede Woche daran denkt, den Server manuell neu zu starten.
Auf Technologie- und Internetthemen spezialisierter Redakteur mit mehr als zehn Jahren Erfahrung in verschiedenen digitalen Medien. Ich habe als Redakteur und Content-Ersteller für E-Commerce-, Kommunikations-, Online-Marketing- und Werbeunternehmen gearbeitet. Ich habe auch auf Websites aus den Bereichen Wirtschaft, Finanzen und anderen Sektoren geschrieben. Meine Arbeit ist auch meine Leidenschaft. Nun, durch meine Artikel in TecnobitsIch versuche, alle Neuigkeiten und neuen Möglichkeiten zu erkunden, die uns die Welt der Technologie jeden Tag bietet, um unser Leben zu verbessern.