webentwicklung-frage-antwort-db.com.de

Pause gegen Stopp im Docker

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.

18
ibodi

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.

20
Hemant Singh

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.

2
Mureinik

Und zusätzlich zu den zuvor hinzugefügten Antworten

laufen docker events nach dem docker stop zeigt Ereignisse

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

laufen docker events nach dem docker pause zeigt nur ein Ereignis

  • pause

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.

2
faboulaws

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.

0
Dr.Mr.Dr