Ich führe einen Docker-Container mit einem Supervisor wie folgt aus:
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}
Nachdem der Produzent aufgehört hat, habe ich:
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
aber Leibeigener-Agent halten Container im laufenden Zustand. Ich möchte den Docker-Container stoppen, wenn der Produzent seine Arbeit mit Status 0 ordnungsgemäß abgeschlossen hat. Ich habe versucht, Prozesse einer Gruppe zuzuordnen, aber es scheint nicht zu funktionieren. Leute, was habe ich übersprungen? Hilf mir bitte!
linux
docker
process
supervisord
containers
Vitaly Velikodny
quelle
quelle
Antworten:
Ich habe das Problem mit dem Supervisor Eventlistener behoben :
kill.py
Auch gutes Artikelprozessmanagement in Docker-Containern
quelle
Hier ist eine etwas optimierte Version, die ein Shell-Skript anstelle eines Python-Skripts verwendet und auch mehrere Dienste abdeckt, wodurch der gesamte Supervisor getötet wird, wenn einer der beiden fehlschlägt.
Supervisord.conf stop-supervisor.shVerweise
quelle
Hier ist eine einfache Lösung für Docker.
supervisord.conf
Ersetzen Sie dies in Ihrem :mit diesem:
quelle