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

Why does one of my Docker containers not start automatically on machine boot?

我有两个 Docker 容器,一个到 运行 一个 Jenkins 实例,一个到 运行 YouTrack 。它们各自的启动脚本如下所示:

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

我希望它们在我启动 PC 时启动 运行ning。 The Docker documenation says "Docker 提供重启策略来控制您的容器是在退出时自动启动,还是在 Docker 重启时自动启动。"

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

如何避免手动启动容器?

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

When you issue a docker stop command Docker will first ask nicely for the process to stop and if it doesn't comply within 10 seconds it will forcibly kill it. If you've ever issued a docker stop and had to wait 10 seconds for the command to return you've seen this in action

The docker stop command attempts to stop a running container first by sending a SIGTERM signal to the root process (PID 1) in the container. If the process hasn't exited within the timeout period a SIGKILL signal will be sent.

对于您的容器,您指定了 --restart on-failure,这意味着 docker 守护进程将仅在容器退出时退出状态 > 0 时才重新启动您的容器。我对你的问题的猜测是你的 youtrack 容器正确地响应 docker 守护进程给出的 SIGTERM 信号并干净地退出(退出状态 0)。另一方面,jenkins 容器并没有干净地退出。因此,只有 jenkins 容器在重启时重启。

要解决此问题,您可以 运行 带有 --restart always 标志的容器,无论如何容器都会重新启动。