如果默认CMD是shell脚本,则Docker停止退出代码
问题描述:
我正在用supervisord在Docker中构建一个tomcat容器。如果Dockerfile默认命令是如果默认CMD是shell脚本,则Docker停止退出代码
CMD supervisord -c /etc/supervisord.conf
,当我派遣码头工人停止命令,容器和退出代码成功退出0
但是相反,如果我有
CMD ["/run"]
和在run.sh中,
supervisord -c /etc/supervisord.conf
码头停止命令给我一个退出码-1。在查看日志时,似乎supervisord没有收到指示退出请求的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)
任何帮助表示赞赏。
感谢, KARTHIK
UPDATE:
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
答
当您运行通过run.sh的过程中,信号只发送到该进程。除非你是
- 走出去的方式发送信号到子进程,例如,与陷阱
- 发送信号到进程组。
- 在run.sh
做exec supervisord ...
子进程将无法获得信号。
+0
我试图用exec supervisord但仍退出代码似乎是-1。 – KarthikJ 2014-10-23 21:39:28
cat你显示你的supervisord.conf文件的内容吗? – Thomasleveil 2014-10-06 19:47:24
@Thomasleveil我已经更新了supervisord文件的问题 – KarthikJ 2014-10-23 21:37:32