it-swarm.com.de

was ist der Unterschied zwischen "Docker Stop" und "Docker Kill"?

Was ist der Unterschied zwischen docker stop und docker kill?

Afaik, beide stoppen einen laufenden Container. Ist es so, dass docker stop versucht, den Prozessablauf im Container auf die richtige Weise zu stoppen, während docker kill ein Kill-Signal sendet? Wenn ja, wie würde docker stop wissen, wie der laufende Prozess korrekt gestoppt werden kann? (Da dies von Prozess zu Prozess unterschiedlich ist)

104
Geert-Jan

Ist es so, dass Docker-Stopp versucht, den Prozess im Container auf die richtige Weise zu stoppen, während Docker-Kill ein Kill-Signal sendet?

Grundsätzlich ja, der Unterschied ist subtil, wird aber in der Befehlszeile Referenz beschrieben:

  • docker stop : Stoppt einen laufenden Container ( SIGTERM senden und dann nach Ablauf der Kulanzfrist SIGKILL ) [...] Der Hauptprozess im Container erhält nach Ablauf der Kulanzfrist SIGTERM Punkt, SIGKILL. [Hervorhebung meines]
  • docker kill : Töte einen laufenden Container ( SIGKILL oder angegebenes Signal senden ) [...] Der Hauptprozess innerhalb des Containers wird SIGKILL oder ein mit der Option angegebenes Signal gesendet --signal. [Hervorhebung von mir]

stop versucht also, ein ordnungsgemäßes Herunterfahren auszulösen, indem das Standardsignal POSIXSIGTERM gesendet wird, während kill den Prozess standardmäßig beendet (es jedoch auch möglich ist, ein anderes Signal zu senden):

Das SIGTERM-Signal wird an einen Prozess gesendet, um dessen Beendigung anzufordern. Im Gegensatz zum SIGKILL-Signal kann es vom Prozess abgefangen und interpretiert oder ignoriert werden. Auf diese Weise kann der Prozess die Freigabe von Ressourcen in Nice beenden und gegebenenfalls den Status speichern. Es ist zu beachten, dass SIGINT nahezu identisch mit SIGTERM ist.

Obwohl dies ohnehin nicht durchgesetzt wird, wird von Prozessen erwartet, dass sie SIGTERM ordnungsgemäß handhaben und in Abhängigkeit von ihren Verantwortlichkeiten das Richtige tun. Dies kann jedoch leicht fehlschlagen, da der ordnungsgemäße Herunterfahren-Versuch länger dauert als die Nachfrist ist von größter Bedeutung (zB für Datenbanken); siehe z. Major Haydens SIGTERM vs. SIGKILL für eine genauere Erklärung:

Die Anwendung kann bestimmen, was sie tun möchte, sobald ein SIGTERM empfangen wird. Während die meisten Anwendungen ihre Ressourcen bereinigen und stoppen, werden einige möglicherweise nicht beendet. Eine Anwendung kann so konfiguriert sein, dass sie etwas völlig anderes ausführt, wenn ein SIGTERM empfangen wird. Befindet sich die Anwendung in einem fehlerhaften Zustand, z. B. beim Warten auf Festplatten-E/A, kann sie möglicherweise nicht auf das gesendete Signal reagieren.

100
Steffen Opel

docker kill stoppt den Hauptzugriffspunktprozess/das Hauptzugriffspunktprogramm abrupt

docker stop wird versuchen, es anmutig zu stoppen (wird höflich fragen: P)

in beiden Fällen bleiben die Änderungen am Dateisystem erhalten (zum Zeitpunkt des Stopps oder Abbruchs). Wenn Sie also docker start <container> eingeben, wird der Vorgang von dort fortgesetzt.

7
awkwardarts

Und zusätzlich zu den zuvor hinzugefügten Antworten

ausführen von docker events nach docker stop zeigt Ereignisse an

  • kill (Signal 15): wobei Signal 15 = SIGTERM ist
  • sterben
  • halt

ausführen von docker events nach docker kill zeigt Ereignisse an

  • kill (Signal 9): wobei Signal 9 = SIGKILL ist
  • Die (Ausfahrt Code 137)

docker stop hat eine Zeitüberschreitung, bevor der Prozess abgebrochen wird. Der Standardwert beträgt 10 Sekunden.

Diese Tabelle hat noch mehr Details.

3
faboulaws

Es ist analog zu Ziehen des Steckers vom Desktop und Herunterfahren des Computers

So wie das Abziehen des Steckers ein hartes Ausschalten bedeutet, bedeutet docker kill die direkte Möglichkeit, my_container zu beenden, wobei nicht versucht wird, den Prozess zuerst ordnungsgemäß herunterzufahren.

Das Herunterfahren des Computers bedeutet, dass ein Signal an das Betriebssystem gesendet wird, um alle Prozesse herunterzufahren. Dabei bedeutet docker stop, dass das Signal SIGTERM an den ausgeführten Container gesendet wird, um die Prozesse ordnungsgemäß zu stoppen.

1
Rajat Badjatya