9 votes

Comment envoyer un signal à un conteneur Docker sans affecter la politique de redémarrage?

Il s'avère que docker kill signifie tuer dans le sens de "le rendre mort", par opposition au sens POSIX de "envoyer un signal".

Nous avons plusieurs conteneurs auxquels nous devons envoyer un SIGHUP afin de recharger la configuration, mais cela les empêche d'appliquer leur politique de redémarrage automatique "always", ce qui n'est pas ce que nous voulons.

Quelle est la meilleure façon d'envoyer des signaux à ces conteneurs sans affecter leur capacité de redémarrage automatique ?


Pour mieux illustrer le problème que nous rencontrons, prenons l'exemple suivant.

Nous avons un conteneur dont la politique de redémarrage est définie sur always

$ docker inspect cloudwatch-exporter | jq .[].HostConfig.RestartPolicy
{
  "Name": "always",
  "MaximumRetryCount": 0
}

Nous rechargeons la configuration à un moment donné en utilisant docker kill:

$ docker kill --signal=SIGHUP cloudwatch-exporter
cloudwatch-exporter

Quelque temps plus tard, quelque chose se produit qui arrête le processus. Pour simuler cela, j'enverrai un signal à l'intérieur du conteneur :

$ docker exec cloudwatch-exporter bash -c "kill 1"

À ce stade, le conteneur est mort et ne redémarrera pas :

$ docker ps -a | grep cloudwatch-exporter
c7827204bba5        prom/cloudwatch-exporter:cloudwatch_exporter-0.8.0                                "java -jar /cloudwat…"   Il y a 20 heures        Exited (143) il y a 3 minutes                            cloudwatch-exporter

Quelles alternatives avons-nous à l'utilisation de docker kill ? Dans de nombreuses situations, docker exec fonctionne, mais cela ne fonctionnera pas pour tout conteneur qui contient uniquement un binaire statiquement lié.

7voto

Michael Hampton Points 232226

Avec l'option --signal pour docker kill?

docker kill --signal=SIGHUP 

Ou avec docker exec?

docker exec  killall -HUP nginx

7voto

FeepingCreature Points 131

Ceci est un bogue Docker connu.

Voir https://github.com/moby/moby/issues/11065 "Les signaux non fatals brisent les politiques de redémarrage"

Voir https://github.com/moby/moby/issues/41302 "Signal brise la politique de redémarrage sauf arrêt"

Contourner le problème en faisant docker exec "kill -HUP 1".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X