web-dev-qa-db-fra.com

pause vs arrêt dans docker

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.

7
ibodi

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.

12
Hemant Singh

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].

2
Mureinik

Et en plus des réponses ajoutées plus tôt

fonctionnement docker events après docker stop affiche les événements

  • kill (signal 15): où signal 15 = SIGTERM
  • mourir
  • arrêtez

fonctionnement docker events après docker pause n'affiche qu'un seul événement

  • pause

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.

2
faboulaws

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.

0
Dr.Mr.Dr