有什么好的方法可以在系统启动时自动启动docker容器?
在 Ubuntu 14.04 上有没有更好的方法可以做到这一点?
我supervisord
以前曾使用过自动启动 Web 应用。但感觉这对 Docker 来说不太合适。
答案1
显然,当前自动启动 Docker 容器的方法(来自 Docker 1.2)是使用重启策略。这将控制 Docker 应如何处理启动时启动容器以及退出时重新启动容器。到目前为止,我使用了“always”选项,并且可以确认它使 Docker 在系统启动时自动启动容器:
sudo docker run --restart=always -d myimage
文档摘录
重启策略使用 Docker 运行中的 --restart 标志,您可以指定容器在退出时应如何重新启动或不应重新启动的重启策略。
no-容器退出时不重新启动。
on-failure – 仅当容器以非零退出状态退出时才重新启动容器。
始终-无论退出状态如何,始终重新启动容器。
您还可以指定使用失败策略时 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 将中止尝试重启容器。提供最大重启次数限制仅对 on-failure 策略有效。
答案2
Docker 有这一页这解释了如何使用 upstart 和 systemd 来执行此操作。我同意这似乎不适合 Docker。他们的解决方案是运行docker start
,假设您已经创建了容器。我认为您要么docker run --rm
在 upstart 脚本中执行(将其视为来自图像的全新进程和容器),要么让 docker 守护进程在启动时重新启动容器本身(如果您不执行其他任何操作,它将默认重新启动)。Upstart 的优点是可以轻松启动/停止进程,但您也可以使用 docker 的启动/停止来实现这一点!
我认为在 upstart 脚本运行之前强迫用户手动创建容器(具有所有正确的端口/卷绑定)是很奇怪的。
答案3
但对于 Docker 来说,这似乎不是一件正确的事情。
为什么不?
我使用supervisord 实现了这个目的,并且取得了巨大的成功。
使用您所了解的、使用有效的、使用您可以轻松维护和理解的东西。
答案4
针对 Ubuntu 22.04 - 2022 的更新解决方案
解决方案 TL;DR:
- 启用docker启动守护进程:
sudo systemctl enable docker.service
- 启用 Docker 容器在重启时启动
docker update --restart=always [container id or container name]
我想我应该为那些正在寻找的人添加一个更新版本的解决方案。
我在 Ubuntu 22.04 上运行 Docker 容器。容器内装有 ubuntu 20.04 和 SQL Server。我希望在机器重新启动时我的 SQL 能够自动启动。
我按照这个说明操作页并且对我的用例来说效果很好。
上述解决方案归功于该链接。