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

我有两个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 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

我希望他们在启动电脑时开始运行。 Docker文档说: “ Docker提供重启策略来控制你的容器在退出时自动启动,还是在Docker重启时启动。

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

我怎样才能避免手动启动容器?

当你重新启动你的电脑时,docker守护进程将会停止正在运行的容器。 这就像在所有正在运行的容器上运行docker stop一样,这是发生了什么(从这里取得 ):

当你发出一个docker stop命令的时候,Docker会首先要求这个进程停止,如果在10秒内没有遵守,它会强行终止它。 如果你曾经发出docker停下来,并且必须等待命令返回10秒,你已经看到了这个行动

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

对于你的容器,你指定了--restart on-failure ,这意味着--restart on-failure守护进程只有在退出时的退出状态大于0时才会重启你的容器。 我对你的问题的猜测是你的youtrack容器正确地对docker守护进程给出的SIGTERM信号作出反应,并干净地退出(退出状态0)。 在另一边,jenkins容器不干净地出口。 出于这个原因,只有jenkins容器重新启动重新启动。

为了解决这个问题,你可以使用--restart always标志来运行容器,并且容器将在任何情况下重启。