在系统启动时自动启动Docker容器的好方法是什么?
有什么办法可以在Ubuntu 14.04上做到这一点?
过去我使用supervisord
来自动启动web应用程序。 但是这对于Docker来说并不合适。
显然,自动启动Docker容器( 来自Docker 1.2 )的当前方法是使用重启策略 。 这将控制Docker如何在启动时处理容器的启动,并在容器退出时重新启动容器。 到目前为止,我已经使用了“always”选项,并且可以确认它使得Docker在系统引导时自动启动容器:
sudo docker run --restart=always -d myimage
重新启动策略在Docker运行中使用–restart标志,您可以指定重新启动策略,以便在退出时应该或不应该重新启动容器。
否 – 不要在容器退出时重新启动容器。
on-failure – 仅在以非零退出状态退出时重新启动容器。
始终 – 始终重新启动容器,无论退出状态如何。
您还可以指定在使用on-failure策略时,Docker将尝试重新启动容器的最大次数。 默认情况下,Docker将永远尝试重新启动容器。
$ sudo docker run --restart=always redis
这将运行redis容器,重启策略始终如此,如果容器退出,Docker将重新启动它。
$ sudo docker run --restart=on-failure:10 redis
这将运行redis容器,其重启策略为on-failure,最大重启次数为10.如果redis容器以非零退出状态退出超过10次,Docker将中止尝试重启容器。 提供最大重启限制仅适用于故障策略。
Docker有这个页面来解释如何用upstart和systemd来实现它。 我同意Docker看起来不太合适。 他们的解决scheme是运行docker start
,它假定你已经创build了你的容器。 我认为你要么在新贵的脚本中docker run --rm
(把它当作一个全新的进程和图像中的容器对待)或者让docker守护进程在启动时重新启动容器(因为默认情况下如果你什么都不做)。 Upstart的优点是可以轻松启动/停止进程,但是您也可以通过docker的启动/停止来实现这一点。
我觉得强迫用户手动创build一个容器(使用所有正确的端口/卷绑定)在新贵脚本工作之前是奇怪的。
但是这对于Docker来说并不合适。
为什么不?
我用supervisord取得了巨大的成功。
使用你所知道的,使用有用的东西,使用你可以很容易地保持和理解的东西。