有什么好办法可以在系统启动时自动启动docker容器?
在Ubuntu 14.04上有什么首选的方法吗?
我过去曾用supervisord
来自动启动网络应用。但这对Docker来说并不合适。
显然,目前自动启动Docker容器的方法(来自Docker 1.2)是使用重新启动策略。这将控制Docker在启动时应如何处理容器的启动,以及在容器退出时如何重新启动。到目前为止,我已经使用了'always'选项,并且可以确认,它使Docker在系统启动时自动启动容器:
sudo docker run --restart=always -d myimage
重启策略 使用Docker运行的--重启标志,你可以 指定一个重启策略,说明容器应该或不应该被 在退出时重新启动。 >; no - 容器退出时不要重新启动。 >; on-failure - 只有当容器以非零的退出状态退出时才重新启动它。 退出状态。 >; always - 无论退出状态如何,总是重新启动容器。 >; 你还可以指定Docker在重启容器时尝试的最大次数。 当使用失败策略时,重新启动容器。默认情况是 Docker将永远尝试重启该容器。 >; $ sudo docker run --restart=always redis 这将在运行redis 容器的重启策略为always,这样如果该容器 退出时,Docker会重新启动它。 >; $ sudo docker run --restart=on-failure:10 redis 这将运行 redis容器,重启策略为故障时,最大 重启次数为10。如果 redis 容器以非零的退出 状态连续超过10次,Docker将放弃重启 容器。提供一个最大的重启限制只对 失败时的策略。
Docker有[这个页面](https://docs.docker.com/config/containers/start-containers-automatically/)解释了如何用upstart和systemd来做。我同意,这似乎不是Docker的正确做法。他们的解决方案是运行 "docker start",它假定你已经创建了你的容器。我认为你应该在upstart脚本中执行docker run --rm
(将其视为一个全新的进程和来自镜像的容器),或者直接让docker守护进程在启动时自行重启容器(如果你不做其他事情,它默认会这样做)。Upstart的优点是可以轻松地启动/停止进程,但你也可以通过docker的启动/停止功能来实现!
我认为强迫用户在upstart脚本工作之前手动创建一个容器(具有所有正确的端口/体积绑定)是很奇怪的。