Saya menjalankan buruh pelabuhan dengan atasan seperti ini:
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}
Setelah produser berhenti, saya mendapat:
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
tetapi agen-budak membuat wadah dalam kondisi berjalan. Saya ingin menghentikan wadah Docker ketika produser menyelesaikan pekerjaannya dengan benar dengan status 0. Saya mencoba untuk bergabung dengan proses ke satu grup tetapi tampaknya tidak berhasil. Kawan, apa yang saya lewati? Tolong bantu aku!
linux
docker
process
supervisord
containers
Vitaly Velikodny
sumber
sumber
Jawaban:
Aku menyelesaikan masalah dengan supervisor EventListener :
kill.py
Juga manajemen proses artikel yang baik dalam wadah buruh pelabuhan
sumber
Berikut adalah versi yang sedikit lebih ramping yang menggunakan skrip shell alih-alih skrip python, dan juga mencakup beberapa layanan, membunuh seluruh pengawas jika gagal.
supervisord.conf stop-supervisor.shReferensi
sumber
Inilah solusi sederhana untuk Docker. Di Anda
supervisord.conf
, ganti ini:dengan ini:
sumber