如何在系统启动时自动启动 docker 容器?

Ste*_*ntz 120 ubuntu docker ubuntu-14.04

系统启动时自动启动docker容器的好方法是什么?

在 Ubuntu 14.04 上有没有首选的方法来做到这一点?

supervisord过去曾用于自动启动网络应用程序。但这对 Docker 来说并不是一件正确的事情。

akn*_*ds1 145

显然,当前自动启动 Docker 容器(从 Docker 1.2 开始)的方法是使用重启策略。这将控制 Docker 应如何处理启动时容器的启动和退出时容器的重新启动。到目前为止,我已经使用了 'always' 选项,并且可以确认它使 Docker 在系统启动时自动启动容器:

sudo docker run --restart=always -d myimage
Run Code Online (Sandbox Code Playgroud)

文档摘录

重新启动策略 在 Docker 运行中使用 --restart 标志,您可以指定一个重新启动策略,用于确定容器在退出时应该或不应该如何重新启动。

no - 退出时不要重新启动容器。

on-failure - 仅当容器以非零退出状态退出时才重新启动容器。

always - 无论退出状态如何,始终重新启动容器。

您还可以指定 Docker 在使用 on-failure 策略时尝试重新启动容器的最大次数。默认情况下,Docker 将永远尝试重新启动容器。

$ sudo docker run --restart=always redis
Run Code Online (Sandbox Code Playgroud)

这将使用始终重启策略运行 redis 容器,以便如果容器退出,Docker 将重启它。

$ sudo docker run --restart=on-failure:10 redis
Run Code Online (Sandbox Code Playgroud)

这将运行 redis 容器,重启策略为 on-failure,最大重启次数为 10。如果 redis 容器以非零退出状态退出超过 10 次,Docker 将中止尝试重启容器。提供最大重启限制仅对 on-failure 策略有效。

  • “始终 - 无论退出状态如何,始终重新启动容器”有点令人困惑。如果您手动退出/停止容器,它不会重新启动容器,这是我正在寻找的行为。 (14认同)
  • 注意:添加了另一个名为“除非停止”的策略。它的作用类似于“always”,但是如果容器停止并重新启动系统或重新启动 docker 守护进程,则容器将不会重新启动。有关所有 4 个选项的详细介绍,请参见此处 https://blog.codeship.com/ensuring-containers-are-always-running-with-dockers-restart-policy/ (13认同)
  • 当然,`docker` 守护进程必须自动启动以支持这一点。 (5认同)

Law*_*oot 10

Docker 有这个页面,解释了如何使用 upstart 和 systemd 来做到这一点。我同意这对 Docker 来说似乎不是正确的事情。他们的解决方案是运行docker start,假设您已经创建了容器。我认为你要么docker run --rm在 upstart 脚本中做(把它当作一个全新的进程和一个镜像的容器),要么让 docker 守护进程在启动时重新启动容器(如果你什么都不做,默认情况下它会这样做) )。Upstart 具有允许轻松启动/停止进程的优势,但您也可以通过 docker 的启动/停止来实现!

我认为在 upstart 脚本工作之前强制用户手动创建一个容器(具有所有正确的端口/卷绑定)是很奇怪的。


EEA*_*EAA 6

但这对 Docker 来说并不是一件正确的事情。

为什么不?

我使用 supervisord 取得了巨大的成功。

使用您所知道的,使用有效的,使用您可以轻松维护和理解的东西。