系统启动时自动启动Docker容器的好方法是什么?
在Ubuntu 14.04上是否有首选的方法?
我supervisord
过去曾使用过自动启动Web应用程序。但这对于Docker来说并不正确。
系统启动时自动启动Docker容器的好方法是什么?
在Ubuntu 14.04上是否有首选的方法?
我supervisord
过去曾使用过自动启动Web应用程序。但这对于Docker来说并不正确。
Answers:
显然,当前自动启动Docker容器(从Docker 1.2开始)的方法是使用重新启动策略。这将控制Docker在启动时应如何处理容器以及在退出时应如何重新启动容器。到目前为止,我已经使用了“ always”选项,并且可以确认它使Docker在系统引导时自动启动了容器:
sudo docker run --restart=always -d myimage
重新启动策略使用Docker运行时的--restart标志,您可以为容器在退出时应如何重启的方式指定重启策略。
否-退出容器时不要重新启动容器。
失败时-仅在退出状态为非零时退出容器。
始终-无论退出状态如何,始终重新启动容器。
您还可以指定使用失败策略时Docker尝试重新启动容器的最大次数。默认是Docker将永远尝试重新启动容器。
$ sudo docker run --restart=always redis
这将以始终为重启策略的方式运行redis容器,以便如果容器退出,则Docker将重新启动它。
$ sudo docker run --restart=on-failure:10 redis
这将以重新启动策略失败(on-failure)且最大重新启动次数为10的方式运行redis容器。如果redis容器连续以非零退出状态退出10次以上,则Docker将中止尝试重新启动容器的操作。提供最大重启限制仅对失败策略有效。
unless-stopped
添加了另一个策略。它的行为类似于always
但如果容器停止并且系统重新启动或docker daemon重新启动,则容器将不会重新启动。看到这里所有的4个选项中的一个很好的写了blog.codeship.com/...
docker
守护程序必须自动启动以支持此功能。
Docker的页面说明了如何使用upstart和systemd进行操作。我同意,对于Docker来说似乎不合适。他们的解决方案是运行docker start
,它假定您已经创建了容器。我认为您可以docker run --rm
在upstart脚本中进行处理(就像从映像中处理全新的进程和容器一样),或者只是让docker daemon在启动时重新启动容器本身(默认情况下,如果您不执行其他任何操作,它将重新启动容器) )。Upstart具有允许轻松启动/停止进程的优点,但是您也可以通过docker的启动/停止来实现!
我认为强迫用户在upstart脚本生效之前手动创建一个容器(具有所有正确的端口/卷绑定)是很奇怪的。
但这对于Docker来说并不正确。
为什么不?
我为此成功使用了supervisor。
使用您知道的东西,使用有效的东西,使用可以轻松维护和理解的东西。
--rm
吗?
--rm
在这里有意义。
docker
是进行更换lxc
或openvz
具有lxc.start.auto = 1
和vzctl set --onboot yes
。ESXi和其他虚拟化解决方案也包含此功能。像劳伦斯一样,我也不认为这种自动启动功能应该以特定于发行版的方式实现,因为码头用户应该能够在每个平台上以相同的知识来解决相同的问题。