Ist es so, dass Docker Stop versucht, den Prozess im Container auf korrekte Weise zu stoppen, während Docker Kill ein Kill-Signal sendet?
Grundsätzlich ist der Unterschied geringfügig, wird jedoch in der Befehlszeilenreferenz beschrieben :
- Docker-Stopp : Stoppen Sie einen laufenden Container ( senden Sie SIGTERM und dann SIGKILL nach Ablauf der Gnadenfrist ) [...] Der Hauptprozess im Container erhält SIGTERM und nach einer Gnadenfrist SIGKILL. [Hervorhebung mein]
- docker kill : Beendet einen laufenden Container ( sendet SIGKILL oder angegebenes Signal ) [...] Der Hauptprozess im Container wird SIGKILL oder ein beliebiges Signal gesendet, das mit der Option --signal angegeben wurde. [Hervorhebung mein]
Es wird also stop
versucht, ein ordnungsgemäßes Herunterfahren durch Senden des Standard- POSIX-Signals auszulösen SIGTERM
, während kill
der Prozess standardmäßig beendet wird (aber auch jedes andere Signal gesendet werden kann):
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 eine schöne Beendigungsfreigabe durchführen und gegebenenfalls den Status speichern. Es ist zu beachten, dass SIGINT nahezu identisch mit SIGTERM ist.
Obwohl dies in keiner Weise erzwungen wird, wird im Allgemeinen von Prozessen erwartet, SIGTERM
dass sie ordnungsgemäß arbeiten und abhängig von ihren Verantwortlichkeiten das Richtige tun. Dies kann leicht fehlschlagen, da der Versuch des Herunterfahren des Herunterfahrens länger dauert als die Übergangszeit, was zu berücksichtigen ist, wenn die Datenintegrität zutrifft vorrangig (zB für Datenbanken); Eine ausführlichere Erklärung finden Sie z. B. bei Major Hayden's SIGTERM vs. SIGKILL :
Die Anwendung kann bestimmen, was sie tun möchte, wenn ein SIGTERM empfangen wird. Während die meisten Anwendungen ihre Ressourcen bereinigen und stoppen, tun dies manche nicht. Eine Anwendung kann so konfiguriert sein, dass sie etwas völlig anderes tut, wenn ein SIGTERM empfangen wird. Wenn sich die Anwendung in einem fehlerhaften Zustand befindet, beispielsweise auf Festplatten-E / A, wartet sie möglicherweise nicht auf das gesendete Signal.