Stefan Arentz Asked: 2014-10-03 06:25:34 +0800 CST2014-10-03 06:25:34 +0800 CST 2014-10-03 06:25:34 +0800 CST 如何在系统启动时自动启动 docker 容器? 772 系统启动时自动启动docker容器的好方法是什么? 在 Ubuntu 14.04 上是否有首选方法? 我过去曾使用supervisord过自动启动网络应用程序。但这对 Docker 来说并不合适。 ubuntu 3 个回答 Voted Best Answer aknuds1 2014-12-08T12:18:39+08:002014-12-08T12:18:39+08:00 显然,当前自动启动 Docker 容器(从 Docker 1.2开始)的方法是使用重启策略。这将控制 Docker 在启动时如何处理容器的启动以及在容器退出时如何重新启动容器。到目前为止,我已经使用了“始终”选项,并且可以确认它使 Docker 在系统启动时自动启动容器: sudo docker run --restart=always -d myimage 文档摘录 重启策略 使用 Docker run 上的 --restart 标志,你可以指定一个重启策略来决定容器在退出时应该或不应该如何重启。 no - 容器退出时不要重新启动它。 on-failure - 仅当容器以非零退出状态退出时才重新启动容器。 always - 无论退出状态如何,始终重新启动容器。 您还可以指定 Docker 在使用 on-failure 策略时尝试重新启动容器的最大次数。默认情况下,Docker 将永远尝试重新启动容器。 $ sudo docker run --restart=always redis 这将以 always 的重启策略运行 redis 容器,这样如果容器退出,Docker 将重启它。 $ sudo docker run --restart=on-failure:10 redis 这将以 on-failure 重启策略和最大重启计数 10 运行 redis 容器。如果 redis 容器以非零退出状态退出连续超过 10 次,Docker 将中止尝试重启容器。提供最大重启限制仅对失败策略有效。 Lawrence Kesteloot 2014-10-14T20:49:07+08:002014-10-14T20:49:07+08:00 Docker 有这个页面解释了如何使用 upstart 和 systemd 做到这一点。我同意这对 Docker 来说似乎不是正确的事情。他们的解决方案是 run docker start,它假定您已经创建了容器。我认为您要么docker run --rm在新贵脚本中执行(将其视为来自映像的全新进程和容器),要么只是让 docker 守护进程在启动时重新启动容器本身(默认情况下,如果您什么都不做,它将)。Upstart 具有允许轻松启动/停止进程的优势,但您也可以通过 docker 的启动/停止来实现! 我认为在 upstart 脚本运行之前强制用户手动创建一个容器(具有所有正确的端口/卷绑定)是很奇怪的。 EEAA 2014-10-03T06:27:22+08:002014-10-03T06:27:22+08:00 但这对 Docker 来说并不合适。 为什么不? 我为此使用了 supervisord 并取得了巨大的成功。 使用您所知道的,使用有效的,使用您可以轻松维护和理解的东西。
显然,当前自动启动 Docker 容器(从 Docker 1.2开始)的方法是使用重启策略。这将控制 Docker 在启动时如何处理容器的启动以及在容器退出时如何重新启动容器。到目前为止,我已经使用了“始终”选项,并且可以确认它使 Docker 在系统启动时自动启动容器:
文档摘录
Docker 有这个页面解释了如何使用 upstart 和 systemd 做到这一点。我同意这对 Docker 来说似乎不是正确的事情。他们的解决方案是 run
docker start
,它假定您已经创建了容器。我认为您要么docker run --rm
在新贵脚本中执行(将其视为来自映像的全新进程和容器),要么只是让 docker 守护进程在启动时重新启动容器本身(默认情况下,如果您什么都不做,它将)。Upstart 具有允许轻松启动/停止进程的优势,但您也可以通过 docker 的启动/停止来实现!我认为在 upstart 脚本运行之前强制用户手动创建一个容器(具有所有正确的端口/卷绑定)是很奇怪的。
为什么不?
我为此使用了 supervisord 并取得了巨大的成功。
使用您所知道的,使用有效的,使用您可以轻松维护和理解的东西。