2015-12-21 80 views
1

我使用的码头工人创造的tcServer实例,它是成功停止,当我做如何在Docker中重新启动tcserver实例?

./tcruntime-ctl.sh停止

然而,该实例并不成功,当我做重新启动

./tcruntime-ctl.sh运行

原因是,PID文件(PID = 1)仍然存在,不会被删除

请注意,我用的运行命令

+0

也许你可以使用https://github.com/phusion/baseimage-docker避免PID 1 PB?你能展示一个复制器吗?码头运行--restart =总是会有帮助吗? Docker运行的文档https://docs.docker.com/engine/reference/commandline/cli/#run – user2915097

+0

如果我执行'docker run --restart = always',它将在docker守护进程重新启动时重启容器。我不想那样。通过,你的意思是由复制者的方式? – meallhour

+0

另一个选项可能是'ENTRYPOINT tcruntime-ctl.sh start && tail -f/dev/null'但是,这将运行tcserver作为后台进程,并且在这种情况下,如何确保容器在tcserver实例已停止? – meallhour

回答

0

运行的tcServer实例作为前台进程如果错误很简单,就是有一个来自先前运行的遗留pidfile,解决方法是在调用tcruntime-ctl.sh脚本之前删除pidfile。由于tcServer实例的生命周期与docker容器的生命周期相关,因此可以安全地假定pidfile中引用的进程先前已退出。你可以前exec编写自己的脚本,清理荷兰国际集团tcruntime.sh,或者附加类似以下内容:

#!/bin/sh 

pidfile=$(dirname $0)/../logs/tcserver.pid 
if [ -f $pidfile ] ; then 
    rm $pidfile 
fi