2 votes

Docker - que fait réellement `docker run --restart always`?

Bien que le drapeau --restart semble simple et direct, j'ai eu plusieurs questions en l'expérimentant :

  1. En ce qui concerne les définitions de ENTRYPOINT - quelles sont les sémantiques définies réellement lors du redémarrage ?
  2. Si j'utilise exec dans le conteneur (je suis sur un DDC) et que je tue le processus avec -9, il redémarre, mais si je fais docker kill, il ne le fait pas. Pourquoi ?
  3. Comment le redémarrage interagit-il avec les conteneurs de données partagées / les volumes nommés ?

2voto

Harold Castillo Points 347

Politiques de redémarrage

En utilisant le drapeau --restart sur la commande Docker run, vous pouvez spécifier une politique de redémarrage pour indiquer si un conteneur doit être redémarré ou non à la sortie.

Lorsqu'une politique de redémarrage est active sur un conteneur, il sera affiché comme étant soit Up (actif) ou Restarting (redémarrage en cours) dans docker ps. Il peut également être utile d'utiliser docker events pour voir la politique de redémarrage en effet.

docker run --always

Redémarre toujours le conteneur indépendamment de l'état de sortie. Lorsque vous spécifiez always, le démon Docker essaiera de redémarrer le conteneur indéfiniment. Le conteneur démarrera également à chaque démarrage du démon, indépendamment de l'état actuel du conteneur.

Je vous recommande cette documentation sur les politiques de redémarrage

Politiques de redémarrage

Politiques de redémarrage - plus de détails

0voto

JoeG Points 1492

J'ai eu un peu de temps pour déboguer cela plus aujourd'hui -> parce que j'utilisais une image de docker 'officielle', j'avais peu voire aucune visibilité sur ce qui se passait. Pour résoudre cela, j'ai étendu l'image officielle et invoqué mon propre point d'entrée. Le Dockerfile :

FROM officialImage:version

ENV envOne=value1  \
    envTwo=value2
COPY wrapper-entrypoint.sh /
ENTRYPOINT ["/wrapper-entrypoint.sh"]

Ensuite, j'ai fait un 'set -x' dans le script wrapper-entrypoint.sh et invoqué l'original :

#!/bin/bash
set -x

echo "Être pointilleux : tous les arguments passés : $@"
bash -x ./original-entrypoint.sh "$@"

À partir de cela, j'ai découvert :

  • Le redémarrage appelle bien le ENTRYPOINT original avec les arguments originaux. L'image officielle que j'ai utilisée a détecté qu'elle était déjà initialisée et a donc agi différemment. C'est pourquoi j'étais confus sur la sémantique. Utiliser -x m'a permis de voir ce qui se passait réellement.
  • Je ne sais toujours pas pourquoi docker kill arrête le redémarrage, mais c'est ce que je vois - du moins sur Docker Data Center.
  • Je ne crois pas que les volumes de données partagés affectent cela de quelque manière, SAUF pour les actions qu'un script ENTRYPOINT donné pourrait prendre en fonction de sa condition au moment du redémarrage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X