为什么我的一个Docker容器没有在机器启动时自动启动?

时间:2017-09-07 07:37:59

标签: linux docker jenkins restart youtrack

我有两个Docker容器,一个用于运行 Jenkins 实例,另一个用于运行 YouTrack 。它们各自的起始脚本如下所示:

  • Jenkins:docker run --name jenkins_master --restart on-failure -p 8080:8080 -p 50000:50000 -v /home/ci/jenkins_home/:/var/jenkins_home -d jenkins:latest

  • YouTrack:docker run --name youtrack --restart on-failure -p 8081:80 -v /home/ci/youtrack/data/:/opt/youtrack/data/ -v /home/ci/youtrack/backup/:/opt/youtrack/backup -d uniplug/youtrack

如您所见,没有什么特别的,一些端口映射和一些-v

我希望他们在启动电脑时开始运行。 The Docker documenation says" Docker提供重启策略来控制容器在退出时或Docker重启时是否自动启动。"

作为Docker"重启"当我启动我的机器时,由于--restart on-failure,我假设两个容器都在启动时运行。但只有 Jenkins 开始在端口8080上运行,我必须在重启机器时手动启动YouTrack。

如何避免手动启动容器?

1 个答案:

答案 0 :(得分:4)

当您重新启动PC时,docker守护程序所做的是尝试停止正在运行的容器。这就像在所有正在运行的容器上运行docker stop,这就是发生的情况(取自here):

  

当你发出一个docker stop命令时,Docker会先问好   停止的过程,如果它在10秒内不符合,它将会   强行杀死它。如果你曾经发过码头停车而不得不等待   命令返回10秒你已经看到了这个动作

     

docker stop命令首先尝试停止正在运行的容器   将SIGTERM信号发送到容器中的根进程(PID 1)。   如果进程在超时期限内没有退出,则为SIGKILL   信号将被发送。

对于您的容器,您指定了--restart on-failure,这意味着仅当退出状态为>时,docker守护程序才会重新启动容器。他们退出时为0。我对你的问题的猜测是你的youtrack容器正确地对docker守护进程给出的SIGTERM信号作出反应并且干净地退出(退出状态0)。在另一侧,詹金斯容器不会干净地离开。因此,只有jenkins容器在重新启动时重新启动。

要解决此问题,您可以使用--restart always标志运行容器,并且容器将在任何情况下重新启动。