【问题标题】:How to restart tcserver instance within docker?如何在 docker 中重启 tcserver 实例?
【发布时间】:2015-12-21 15:18:58
【问题描述】:

我正在使用 docker 创建一个 tcserver 实例,当我这样做时它已成功停止

./tcruntime-ctl.sh 停止

但是,当我这样做时,实例没有成功重启

./tcruntime-ctl.sh 运行

原因是 PID 文件(PID=1)仍然存在并且没有被删除

请注意,我使用 run 命令将 tcserver 实例作为前台进程运行

【问题讨论】:

  • 也许您可以使用github.com/phusion/baseimage-docker 来避免PID 1 pb?你能展示一个复制器吗? docker run --restart=always 有帮助吗? docker run 的文档docs.docker.com/engine/reference/commandline/cli/#run
  • 如果我这样做docker run --restart=always,如果重新启动 docker 守护进程,它将重新启动容器。我不想要那个。顺便说一句,您所说的复制器是什么意思??
  • 另一个选项可能是ENTRYPOINT tcruntime-ctl.sh start && tail -f /dev/null 但是,这会将 tcserver 作为后台进程运行,在这种情况下,如何确保容器在 tcserver 实例停止时也会死亡??跨度>
  • 我可以在这里使用STOPSIGNAL 指令吗? @user2915097
  • 复制器意味着足够的细节,以便我可以启动完全相同的过程

标签: docker dockerfile docker-compose dockerhub tcserver


【解决方案1】:

如果错误只是因为之前的运行存在残留的 pidfile,则可以在调用 tcruntime-ctl.sh 脚本之前删除 pidfile。由于 tcServer 实例的生命周期与 docker 容器的生命周期相关,因此可以安全地假设 pidfile 中引用的进程先前已退出。您可以编写自己的脚本,在 execing tcruntime.sh 之前进行清理,或者添加如下内容:

#!/bin/sh

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多