J'essaie de comprendre quelle est la différence entre les commandes docker stop ContainerID
et docker pause ContainerID
. Selon cette page les deux sont utilisés pour suspendre un conteneur Docker existant.
La commande docker pause
Suspend tous les processus dans les conteneurs spécifiés. Sous Linux, cela utilise le congélateur cgroups. Traditionnellement, lors de la suspension d'un processus, le signal SIGSTOP est utilisé, ce qui est observable lorsque le processus est suspendu
https://docs.docker.com/engine/reference/commandline/pause/
La commande docker stop
. Le processus principal à l'intérieur du conteneur recevra SIGTERM, et après une période de grâce, SIGKILL.
https://docs.docker.com/engine/reference/commandline/stop/#options
SIGTERM
est le signal de terminaison. Le comportement par défaut consiste à terminer le processus, mais il peut également être intercepté ou ignoré. L'intention est de tuer le processus, gracieusement ou non, mais d'abord de lui laisser une chance de se nettoyer.
SIGKILL
est le signal d'arrêt. Le seul comportement est de tuer immédiatement le processus. Comme le processus ne peut pas capter le signal, il ne peut pas être nettoyé, et c'est donc un signal de dernier recours.
SIGSTOP
est le signal de pause. Le seul comportement est de suspendre le processus; le signal ne peut pas être capturé ou ignoré. Le shell utilise la pause (et son équivalent, la reprise via SIGCONT) pour implémenter le contrôle des travaux.
docker pause
met en pause (c'est-à-dire envoie SIGSTOP
) met en pause (lire: suspend) tous les processus dans un conteneur [s].
docker stop
s'arrête (c'est-à-dire envoie SIGTERM
, et si nécessaire SIGKILL
) au processus principal du convoyeur [s].
Et en plus des réponses ajoutées plus tôt
fonctionnement docker events
après docker stop
affiche les événements
fonctionnement docker events
après docker pause
n'affiche qu'un seul événement
Aussi docker pause
conserverait toujours la partie mémoire pendant la pause du conteneur> Cette mémoire est utilisée lorsque le conteneur est repris. docker stop
libère la mémoire utilisée après l'arrêt du conteneur.
Ce tablea a encore plus de détails.
Lorsque le conteneur en cours d'exécution est émis avec la commande docker pause, le signal SIGSTOP est transmis, ce qui permet aux processus à l'intérieur du conteneur (essentiellement le conteneur lui-même) d'être dans un état de pause. Ainsi, lorsque le docker unpause est émis, le signal SIGCONT est transmis aux processus de conteneur pour restaurer les processus de conteneur.
Lorsque la commande docker stop est émise vers le conteneur en cours d'exécution, le signal SIGTERM est transmis aux processus de conteneur pour arrêter et arrêter le conteneur.
Par conséquent, lorsque la pause docker est émise vers un conteneur et que le service docker est redémarré, les groupes de contrôle qui lui sont alloués sont libérés. (car le SIGTERM est transmis à tous les processus de conteneur) Ainsi, après le redémarrage, la pause ne serait pas utile car les conteneurs sont arrêtés.