Je lance le conteneur Docker avec un superviseur comme ceci:
Dockerfile
CMD ["/run.sh"]
run.sh
#!/usr/bin/env bash
exec supervisord -n
supervisor-serf.conf
[group:job]
programs=serf,producer
[program:serf]
command=/start-serf-agent.sh
numprocs=1
autostart=true
autorestart=unexpected
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
start-serf-agent.sh
#!/bin/bash
exec serf agent --join=serf:7946 -tag role=producer
supervisor-servce.conf
[program:producer]
command=/start.sh
numprocs=1
stopasgroup=true
killasgroup=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
start.sh
#!/bin/bash
exec /producer --project=${NAME}
Après l'arrêt du producteur, j'ai:
producer_1 | 2016/02/29 21:59:50 [INFO] serf: EventMemberLeave: 7c4fbc80af97 172.19.0.2
producer_1 | 2016/02/29 21:59:51 INF 1 stopping
producer_1 | 2016/02/29 21:59:51 INF 1 exiting router
producer_1 | 2016-02-29 21:59:51,281 INFO exited: producer (exit status 0; expected)
producer_1 | 2016/02/29 21:59:51 [INFO] agent: Received event: member-leave
mais serf-agent garde le conteneur en état de marche. Je veux arrêter le conteneur Docker lorsque le producteur a terminé son travail correctement avec le statut 0. J'ai essayé de joindre les processus à un groupe mais cela ne semble pas fonctionner. Les gars, qu'est-ce que j'ai sauté? Aidez-moi s'il vous plaît!
linux
docker
process
supervisord
containers
Vitaly Velikodny
la source
la source
Réponses:
J'ai résolu un problème avec le superviseur d' événements du superviseur :
kill.py
Aussi une bonne gestion du processus des articles dans les conteneurs Docker
la source
Voici une version légèrement plus rationalisée qui utilise un script shell au lieu d'un script python, et couvre également plusieurs services, tuant l'ensemble du superviseur en cas d'échec.
supervisord.conf stop-supervisor.shRéférences
la source
Voici une solution simple pour Docker. Dans votre
supervisord.conf
, remplacez ceci:avec ça:
la source