Docker:向已创建的容器添加重启策略
Posted
技术标签:
【中文标题】Docker:向已创建的容器添加重启策略【英文标题】:Docker: Add a restart policy to a container that was already created 【发布时间】:2015-01-07 06:14:05 【问题描述】:我看到 Docker 添加了一些称为重启策略的东西来处理容器的重启,例如重启。
虽然这非常有用,但我发现重启策略命令只适用于 docker run
而不是 docker start
。所以我的问题是:
有什么方法可以为过去已经创建的容器添加重启策略?
【问题讨论】:
您应该将接受的答案更改为@Yale Huang 的答案。当前版本的 docker 接受的答案不正确。我知道当时的答案可能对您有所帮助,但现在它具有误导性。 【参考方案1】:使用--restart=always
策略将在重启时处理现有容器的重启。
问题是,当您运行 docker - how do you disable auto-restart on a container?中讨论的较新版本的映像时,如果有 多个容器 带有 --restart=always
>.
当容器存在时尝试通过 put 自动移除容器 选项
docker run --rm
也将与--restart=always
出现问题 政策,因为它们相互冲突。
$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm
所以在这种情况下最好选择另一个选项:--restart unless-stopped 策略。
$ docker run --rm --restart unless-stopped <image>
此政策不会与docker run --rm
发生冲突,但如 docker documentation 中所述:
它类似于
--restart=always
,除了当容器停止时 (手动或其他方式),即使在 Docker 守护进程之后也不会重新启动 重新启动。
因此,当使用--restart unless-stopped
策略时,为确保在您关闭终端时意外停止的情况下重新启动正常工作,请执行一次在另一个终端,如下所示:
$ docker ps
$ docker restart <container>
等到前一个shell中的杀戮过程结束,然后关闭它并离开(不要退出)。 如果容器仍在运行,请在剩余的终端中再次检查:
$ docker ps
如果它仍在运行,您可以安全地重新启动并再次检查应用程序是否正在重新启动,并看到您的 docker 是干净的,没有未使用的多个容器。
【讨论】:
【参考方案2】:有两种修改 RestartPolicy 的方法:
找出容器ID,停止整个docker服务,修改/var/lib/docker/containers/CONTAINER_ID/hostconfig.json,设置RestartPolicy -> Name为“always”,启动docker服务。docker commit
您的容器作为新镜像,停止并 rm 当前容器,然后使用该镜像启动一个新容器。
【讨论】:
停止容器,编辑,启动容器。奇迹般有效。我不知道为什么编辑被禁用。 在一台带有 docker 1.10 的旧服务器上为我工作(不要问?)。可悲的是docker update
只允许在 1.11+ 上修改重启策略【参考方案3】:
在最新版本的 docker(截至 1.11)中,您有一个 update
命令:
docker update --restart=always <container>
【讨论】:
这个好像是在 Docker 1.11.0 中添加的。 @phansen: Indeed it was. 应该是公认的答案,但需要注意的是它从 Docker 1.11 开始起作用。 使用 docker 17.09 我必须运行docker update --restart always <container>
docs.docker.com/engine/admin/start-containers-automatically
docker update
接受多个容器 ID,因此根本不需要 xargs
,只需使用 docker update --restart=always $(docker ps -q)
。以上是关于Docker:向已创建的容器添加重启策略的主要内容,如果未能解决你的问题,请参考以下文章