GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So verwenden Sie Docker-Neustartrichtlinien, um Container am Laufen zu halten

Docker bietet Ihnen mehrere Optionen, um den Lebenszyklus Ihres Containers zu verwalten. Container werden normalerweise nicht automatisch neu gestartet, nachdem sie beendet wurden. Mit Neustartrichtlinien können Sie die Lebenszyklen einzelner Container steuern.

Neustartrichtlinien werden immer dann verwendet, wenn ein Container nicht mehr ausgeführt wird. Docker prüft auch die Neustartrichtlinien, wenn der Daemon gestartet wird. Sie können diesen Mechanismus verwenden, um Container nach Neustarts mit Ihrem Host hochzufahren.

Verfügbare Richtlinien

Derzeit gibt es vier verschiedene Neustartrichtlinien:

  • no – Diese Richtlinie wird niemals automatisch einen Container starten. Dies ist die Standardrichtlinie für alle Container, die mit docker run erstellt wurden .
  • always – Docker stellt sicher, dass der Container immer läuft. Wenn der Container stoppt, wird er sofort neu gestartet. Sie können den Container immer noch manuell mit docker stop stoppen aber Docker bringt es beim nächsten Neustart des Daemons wieder hoch.
  • on-failure – Der Container wird neu gestartet, wenn er aufgrund eines Fehlers stoppt. Docker bringt den Container nach dem Neustart des Daemons nicht hoch.
  • unless-stopped – Funktioniert ähnlich wie always . Der Unterschied besteht darin, dass Docker den Container niemals neu startet, wenn er manuell gestoppt wurde.

Normalerweise verwenden Sie eine der letzten drei Optionen für Produktionsworkloads. Da Docker-Container häufig für lange laufende Hintergrunddienste verwendet werden, möchten Sie normalerweise, dass sie neu gestartet werden, wenn etwas schief geht. Die no Politik eignet sich am besten für die lokale Entwicklung. Es ist auch nützlich für Utility-Container, die eine einzelne ausführbare Datei ausführen und dann beendet werden.

Es kann schwierig sein, zu entscheiden, welche Neustartrichtlinie verwendet werden soll. always ist oft die natürlichste Wahl, aber das Neustartverhalten des Daemons kann leicht übersehen werden. Wenn Sie möchten, dass Container zuverlässig gestoppt bleiben, nachdem Sie docker stop ausgeführt haben , sollten Sie unless-stopped verwenden .

Docker erkennt Fehler basierend auf dem Exit-Code, der vom Vordergrundprozess des Containers ausgegeben wird. Ein Exit-Code von 1 oder höher wird als Fehler interpretiert. Dies entspricht der Unix-Behandlung von Exit-Codes, wobei nur 0 stellt eine erfolgreiche Ausführung dar.

Wenn Docker Ihren Container neu startet, entspricht dies der Ausführung von docker run wieder. Das ist der ENTRYPOINT des Bildes Skript wird aufgerufen. Bootstrap-Systeme sollten immer widerstandsfähig gegenüber mehreren Aufrufen sein.

Anwenden einer Neustartrichtlinie

Sie können einen Container mit einer bestimmten Neustartrichtlinie starten, indem Sie --restart übergeben Flag an docker run :

docker run --name httpd --restart always httpd:latest

Wenn Sie Docker Compose verwenden, fügen Sie den restart hinzu Feld zu Ihrer docker-compose.yml :

services:
  httpd:
    image: httpd:latest
    restart: always

Sie können die Neustartrichtlinie eines vorhandenen Containers mit docker update ändern . Übergeben Sie den Namen des Containers an den Befehl. Sie können Containernamen finden, indem Sie docker ps -a ausführen .

docker update --restart-policy unless-stopped httpd

Sie können docker update verwenden mit laufenden oder angehaltenen Containern.

Loops neu starten

Docker enthält einige Sicherheitsvorkehrungen gegen ständige Neustartschleifen. Die erste ist eine obligatorische Zeitverzögerung, bevor Neustartrichtlinien aktiviert werden. Docker beginnt nicht mit der Überwachung von Neustarts, bis ein Container mindestens 10 Sekunden lang ausgeführt wurde. Dadurch wird verhindert, dass ein ausgefallener Container ständig neu gestartet wird.

Das andere Spezialverhalten betrifft den docker stop Befehl. Docker respektiert immer die Verwendung von docker stop , sodass der Container nicht sofort neu gestartet wird, nachdem Sie den Befehl ausgeführt haben. Wenn Sie den Container tatsächlich neu starten möchten, verwenden Sie docker restart stattdessen.

Wiederholungsversuche begrenzen

Der on-failure Mit der Neustartrichtlinie können Sie angeben, wie viele Wiederholungen versucht werden sollen. Docker gibt auf und lässt den Container angehalten, wenn er mehrmals hintereinander nicht gestartet werden kann.

docker run httpd:latest --restart on-failure:5

In diesem Beispiel versucht Docker nach einem Fehler fünfmal, den Container neu zu starten (Exit-Code ungleich Null). Wenn der Container beim fünften Versuch nicht gestartet werden kann, werden keine weiteren Versuche unternommen. Diese Option ist nützlich für Container, bei denen ein anhaltender Startfehler wahrscheinlich nicht ohne manuellen Eingriff behoben werden kann.

Untersuchen, warum Container gestoppt wurden

Wenn Sie wissen möchten, warum ein Container gestoppt wurde, führen Sie docker ps -a aus . Dadurch werden die Details aller Ihrer Container angezeigt, unabhängig davon, ob sie angehalten oder ausgeführt werden. Suchen Sie den Zielcontainer und sehen Sie in seiner Spalte „Status“ nach. Bei angehaltenen Containern wird der Exit-Code in Klammern angezeigt. Wenn der Code größer als Null ist, wurde der Container aufgrund eines Fehlers beendet.

Sie müssen in der Dokumentation für den im Container ausgeführten Prozess nachschlagen, um die Bedeutung der einzelnen Fehlercodes zu ermitteln. Sie können jedoch oft Einblicke in die Ursache eines Absturzes erhalten, indem Sie die Protokolle des Containers abrufen. Protokolle bleiben verfügbar, nachdem ein Container gestoppt wurde.

docker logs my-container

Der Protokollstream fasst die Standardausgabe- und Standardfehlerstreams des Containers zusammen. Wenn der Fehler protokolliert wurde, sollten Sie damit rechnen, ihn in den letzten paar Zeilen der Ausgabe zu sehen.

Zusammenfassung

Neustartrichtlinien helfen sicherzustellen, dass Ihre Docker-Container da sind, wenn Sie sie brauchen. Der Standardwert no Die Richtlinie ist für die meisten Produktionsworkloads ungeeignet. Sie möchten nicht, dass Ihre Container angehalten bleiben, wenn sie abstürzen!

Die Verwendung einer der drei neustartfähigen Richtlinien macht Ihre Container widerstandsfähiger gegen Hardware-Neustarts und unerwartete Beendigungen. Docker hält die Dienstverfügbarkeit im Falle eines Containerabsturzes aufrecht.


Docker
  1. So aktualisieren Sie laufende Docker-Container automatisch

  2. So erstellen, listen und löschen Sie Docker-Container unter Linux

  3. So halten Sie Docker-Container am Laufen, wenn der Daemon stoppt

  4. So führen Sie einen Befehl in einem laufenden Docker-Container aus

  5. So teilen Sie Daten zwischen Docker-Containern

So führen Sie SSH in Docker-Container ein [Schritt für Schritt]

So verwenden Sie Docker Commit zum Ändern von Container-Images

So führen Sie Docker-Container aus

So benennen oder umbenennen Sie Docker-Container

So verwalten Sie Docker-Container

Docker-Container auflisten / starten / stoppen / löschen