Ich versuche zu verstehen, was der Unterschied zwischen den Befehlen docker stop ContainerID
und docker pause ContainerID
. Laut diese Seite werden beide verwendet, um einen vorhandenen Docker-Container anzuhalten.
Der Befehl docker pause
Unterbricht alle Prozesse in den angegebenen Containern. Unter Linux wird hierfür der Gefrierschrank cgroups verwendet. Traditionell wird beim Anhalten eines Prozesses das SIGSTOP-Signal verwendet, das durch das Anhalten des Prozesses beobachtet werden kann
https://docs.docker.com/engine/reference/commandline/pause/
Der Befehl docker stop
. Der Hauptprozess im Container erhält SIGTERM und nach einer Nachfrist SIGKILL.
https://docs.docker.com/engine/reference/commandline/stop/#options
SIGTERM
ist das Beendigungssignal. Das Standardverhalten besteht darin, den Prozess zu beenden, er kann jedoch auch abgefangen oder ignoriert werden. Die Absicht ist, den Prozess anmutig oder nicht zu beenden, aber ihm zuerst die Möglichkeit zu geben, aufzuräumen.
SIGKILL
ist das Kill-Signal. Das einzige Verhalten besteht darin, den Prozess sofort abzubrechen. Da der Prozess das Signal nicht erfassen kann, kann er nicht bereinigen, und dies ist somit ein Signal des letzten Auswegs.
SIGSTOP
ist das Pausensignal. Das einzige Verhalten besteht darin, den Prozess anzuhalten. Das Signal kann nicht abgefangen oder ignoriert werden. Die Shell verwendet die Pause (und ihr Gegenstück, die über SIGCONT fortgesetzt wird), um die Jobsteuerung zu implementieren.
docker pause
pausiert (d. h. sendet SIGSTOP
) pausiert (liest: unterbricht) alle Prozesse in einem Container [s].
docker stop
stoppt (d. h. sendet SIGTERM
und bei Bedarf SIGKILL
) an den Hauptprozess des Trainers.
Und zusätzlich zu den zuvor hinzugefügten Antworten
laufen docker events
nach dem docker stop
zeigt Ereignisse
laufen docker events
nach dem docker pause
zeigt nur ein Ereignis
Ebenfalls docker pause
würde den Speicherbereich beibehalten, während der Container angehalten wird> Dieser Speicher wird verwendet, wenn der Container wieder aufgenommen wird. docker stop
Geben Sie den Speicher frei, der nach dem Stoppen des Containers verwendet wird.
Diese Tabelle enthält noch mehr Details.
Wenn der laufende Container mit dem Docker-Pause-Befehl ausgegeben wird, wird das SIGSTOP-Signal übergeben, wodurch die Prozesse im Container (im Grunde der Container selbst) angehalten werden können. Wenn die Docker-Unpause ausgegeben wird, wird das SIGCONT-Signal an die Containerprozesse übergeben, um die Containerprozesse wiederherzustellen.
Wenn der Docker-Stoppbefehl an den laufenden Container ausgegeben wird, wird das SIGTERM-Signal an die Containerprozesse übergeben, um den Container zu stoppen und zu stoppen.
Wenn also die Docker-Pause an einen Container ausgegeben wird und der Docker-Dienst neu gestartet wird, werden die ihm zugewiesenen cgroups freigegeben. (da das SIGTERM an alle Containerprozesse übergeben wird) Nach dem Neustart wäre die Unterbrechung nicht hilfreich, da die Container gestoppt werden.