Код выхода остановки Docker -1, если CMD по умолчанию является сценарием оболочки

Я создаю контейнер tomcat в Docker с помощью supervisord. Если команда по умолчанию в Dockerfile

CMD supervisord -c /etc/supervisord.conf

и когда я отправляю команду docker stop, контейнер успешно завершается с кодом выхода 0.

Но вместо этого, если у меня есть

CMD ["/run"] 

и в run.sh,

supervisord -c /etc/supervisord.conf

Команда остановки докера дает мне код выхода -1. При просмотре журналов кажется, что супервизор не получил SIGTERM, указывающий на запрос на выход.

2014-10-06 19:48:54,420 CRIT Supervisor running as root (no user in config file)
2014-10-06 19:48:54,450 INFO RPC interface 'supervisor' initialized
2014-10-06 19:48:54,451 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2014-10-06 19:48:54,451 INFO supervisord started with pid 6
2014-10-06 19:48:55,457 INFO spawned: 'tomcat' with pid 9
2014-10-06 19:48:56,503 INFO success: tomcat entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

в отличие от предыдущих журналов, где он получает sigterm и изящно завершает работу.

2014-10-06 20:02:59,527 CRIT Supervisor running as root (no user in config file)
2014-10-06 20:02:59,556 INFO RPC interface 'supervisor' initialized
2014-10-06 20:02:59,556 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2014-10-06 20:02:59,557 INFO supervisord started with pid 1
2014-10-06 20:03:00,561 INFO spawned: 'tomcat' with pid 9
2014-10-06 20:03:01,602 INFO success: tomcat entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-10-06 20:05:11,690 WARN received SIGTERM indicating exit request
2014-10-06 20:05:11,690 INFO waiting for tomcat to die
2014-10-06 20:05:12,450 INFO stopped: tomcat (exit status 143)

Любая помощь приветствуется.

Спасибо, Картик

ОБНОВЛЕНИЕ:

файл supervisord.conf

[supervisord]
nodaemon=true
logfile=/var/log/supervisor/supervisord.log

[program:mysql]
command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/run/mysqld/mysqld.pid
stdout_logfile=/tmp/mysql.log
stderr_logfile=/tmp/mysql_err.log

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[unix_http_server]
file=/tmp/supervisor.sock ; path to your socket file

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

person KarthikJ    schedule 06.10.2014    source источник
comment
cat вы показываете содержимое вашего файла supervisord.conf?   -  person Thomasleveil    schedule 06.10.2014
comment
@Thomasleveil Я обновил файл supervisord в вопросе   -  person KarthikJ    schedule 24.10.2014


Ответы (1)


Когда вы запускаете процесс через run.sh, сигналы отправляются только этому процессу. Если вы не

  1. стараясь изо всех сил отправлять сигналы дочерним процессам, например. с ловушкой
  2. отправка сигналов группе процессов.
  3. выполнение exec supervisord ... в run.sh

дочерний процесс не получит сигналов.

person seanmcl    schedule 06.10.2014
comment
Я пробовал с exec supervisord, но все равно код выхода кажется -1. - person KarthikJ; 24.10.2014