So implementieren Sie den Selbststart eines Docker-Containers

So implementieren Sie den Selbststart eines Docker-Containers

Container-Autostart

Docker bietet einen Neustartrichtlinienmechanismus, der steuern kann, dass der Container automatisch gestartet wird, wenn der Container beendet wird oder Docker neu gestartet wird. Diese Neustartrichtlinie stellt sicher, dass zusammengehörige Container in der richtigen Reihenfolge gestartet werden. Obwohl diese Aktion auch durch eine Prozessüberwachung (wie etwa systemd) erreicht werden kann, empfiehlt Docker dennoch, die Verwendung der Prozessüberwachung zum „Selbststarten“ von Containern zu vermeiden.

Es gibt einen Unterschied zwischen der Neustartrichtlinie von Docker und dem Startflag --live-restore des Befehls dockerd: Das Flag --live-restore stellt sicher, dass der Container beim Upgrade von Docker weiter ausgeführt wird, die Netzwerk- und Benutzerterminaleingaben jedoch unterbrochen werden.

Was genau ist also eine Neustartrichtlinie? Schauen wir uns die tatsächliche Situation an.

Verwenden der Neustartrichtlinie

Die Neustartrichtlinie wird durch das Flag --restart angegeben, wenn der Container mit docker run gestartet wird. Für dieses Flag stehen mehrere Werte zur Auswahl, und unterschiedliche Werte haben unterschiedliche Verhaltensweisen, wie in der folgenden Tabelle aufgeführt:

Flagge Beschreibung
NEIN Den Container nicht automatisch neu starten. (Standardwert)
bei Ausfall Der Container wird mit einem Fehler beendet (der Container-Exit-Status ist nicht 0) und startet den Container neu
sofern nicht gestoppt Starten Sie den Container nur neu, wenn der Container gestoppt wurde oder Docker gestoppt/neu gestartet wurde.
stets Starten Sie den Container nur neu, wenn der Container gestoppt wurde oder Docker gestoppt/neu gestartet wurde.

Beispiel: Der folgende Befehl startet einen Redis-Container. Wenn der Redis-Container gestoppt oder Docker neu gestartet wird, wird der Redis-Container neu gestartet.

$ docker run -dit --restart, sofern nicht angehaltenes Redis

Details zur Neustartrichtlinie

Beim Einsatz von Neustartrichtlinien müssen Sie auf folgende Details achten:

(1) Die Neustartrichtlinie wird erst wirksam, nachdem der Container erfolgreich gestartet wurde. „Erfolgreicher Start“ bedeutet hier, dass der Container seit mindestens 10 Sekunden aktiv ist und von Docker überwacht wird. Damit soll verhindert werden, dass Container, die nicht erfolgreich gestartet wurden, in eine Endlosschleife von Neustarts geraten.

(2) Wenn Sie einen Container manuell stoppen (was ist der Unterschied zum expliziten Stoppen oben), wird die für den Container festgelegte Neustartrichtlinie ignoriert, sofern nicht der Docker-Daemon oder der Container manuell neu gestartet wird. Dadurch wird ein weiterer Teufelskreis vermieden.

(3) Neustartrichtlinien können nur für Container verwendet werden. Für Swarm-Dienste haben Neustartrichtlinien ungültige Konfigurationen.

Prozessüberwachung

Wenn die oben genannten Neustartrichtlinien Ihren Anforderungen nicht entsprechen, können Sie auch Lösungen zur Prozessüberwachungsverwaltung verwenden, wie z. B. Upstart, Systemd oder Supervisor usw.

Bei dieser Lösung läuft der Prozessüberwachungsdienst im Container. Es kann überwachen, ob ein Prozess ausgeführt wird, und den Prozess starten, wenn er nicht ausgeführt wird. Docker ist sich von all dem, was passiert, überhaupt nicht bewusst.

Docker empfiehlt diese Methode nicht zur Prozessüberwachung. Der Grund ist einfach. Diese Methode hängt mit der Systemplattform und sogar der Linux-Distribution zusammen.

Original: https://docs.docker.com/engine/admin/start-containers-automatically/#use-a-process-manager

Docker-Container startet automatisch beim Booten

Wenn Sie den Container mit Docker Run starten, verwenden Sie den Parameter --restart, um Folgendes festzulegen:

# docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=alway

 --name bvrfis --volumes-from logdata mytomcat:4.0 /root/run.sh   

--restart spezifische Parameterwertdetails:

  • nein – wenn der Container beendet wird, starten Sie den Container nicht neu;
  • bei Fehler – Starten Sie den Container nur neu, wenn er mit einem Status ungleich Null beendet wird;
  • immer – starten Sie den Container unabhängig vom Beendigungsstatus neu;

Sie können auch angeben, wie oft Docker maximal versucht, den Container bei Verwendung der On-Failure-Strategie neu zu starten. Standardmäßig versucht Docker, Container immer wieder neu zu starten.

# sudo docker run --restart=on-failure:10 redis

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • 6 Lösungen für Netzwerkfehler im Docker-Container
  • Beispiel zum Erstellen und Ausführen mehrerer MySQL-Container in Docker
  • So isolieren Sie Benutzer in Docker-Containern
  • Detaillierte Erklärung zum Importieren/Exportieren von MySQL-Daten im Docker-Container
  • Docker-Container verwendet Jenkins zum Bereitstellen von Webprojekten (Zusammenfassung)
  • Methode zum Zugriff auf unabhängige IP im Docker-Container
  • Detaillierte Erklärung zur Migration lokaler Docker-Container auf den Server
  • So verwenden Sie Mysql im Tomcat-Container unter Docker
  • So installieren und deinstallieren Sie die Docker-Anwendungscontainer-Engine unter Centos7
  • Fügen Sie die Portzuordnung hinzu, nachdem der Docker-Container gestartet wurde
  • Detaillierte Erläuterung der Docker-Portzuordnung und Containerverbindung
  • Docker-Tutorial: Container verwenden (einfaches Beispiel)

<<:  Probleme und Lösungen für MYSQL5.7.17-Verbindungsfehler unter MAC

>>:  JS implementiert Click-Drop-Effekt

Artikel empfehlen

Analyse der MySQL-Transaktionsmerkmale und Ebenenprinzipien

1. Was ist eine Transaktion? Eine Datenbanktransa...

Implementierung integrierter Module und benutzerdefinierter Module in Node.js

1. Commonjs Commonjs ist ein benutzerdefiniertes ...

Inspirierende Designbeispiele für glänzendes und schimmerndes Website-Design

Diese Sammlung zeigt eine Reihe herausragender und...

Grafisches Tutorial zur Deinstallation und Installation von MySQL unter Linux

Dies ist mein erster Blog. Ich bin seit zwei Jahr...

Implementierung der automatischen Vervollständigung von Docker-Befehlen

Vorwort Ich weiß nicht, wie lange dieser Freund D...

Zusammenfassung der Wissenspunkte zu den Linux-Befehlen ps und pstree

Der ps-Befehl in Linux ist die Abkürzung für „Pro...

Mit CSS3 implementierte Schaltfläche zum Hovern von Bildern

Ergebnis:Implementierungscode html <ul Klasse=...

NestJs verwendet Mongoose zum Betrieb von MongoDB

Ich habe vor Kurzem angefangen, das NestJs-Framew...

Miniprogramm zur Implementierung der Sieve-Lotterie

In diesem Artikelbeispiel wird der spezifische Co...

Grafisches Tutorial zum Konfigurieren eines Protokollservers unter Linux

Vorwort Dieser Artikel stellt hauptsächlich die r...

Lösung für die falsche Ausrichtung des Eingabecursors in Chrome, Firefox und IE

Detaillierte Erklärung zur Fehlplatzierung des Ein...

Architektur und Komponentenbeschreibung der privaten Docker-Bibliothek Harbor

In diesem Artikel wird die Zusammensetzung der Ha...

Beispielcode zur Implementierung von Anti-Shake in Vue

Anti-Shake: Verhindert, dass wiederholte Klicks E...