Docker:将重新启动策略添加到已创建的容器中


229

我看到Docker添加了一种称为“重新启动策略”的东西来处理容器的重新启动,例如在重新启动的情况下。

尽管这非常有用,但是我看到重新启动策略命令仅适用于docker run而不适用docker start。所以我的问题是:

是否可以将重启策略添加到过去已经创建的容器中?


您应该将接受的答案更改为@Yale Huang的答案。对于当前版本的docker,可接受的答案不正确。我了解当时的答案可能对您有所帮助,但现在它具有误导性。
Stepan Vavra

2
做完了 谢谢您的警告。
Enrique Moreno Tent

Answers:


574

在最新版本的docker(从1.11版本开始)中,您具有以下update命令:

docker update --restart=always <container>

9
看起来这是在Docker 1.11.0中添加的。
phansen

@phansen:的确是
TachyonVortex

4
从Docker 1.11开始可以使用的警告应该被接受。
JohnDoe

6
使用docker update --restart always <container> docker
HarlemSquirrel

4
docker update接受多个容器ID,因此根本不需要xargs做就可以了docker update --restart=always $(docker ps -q)
markusk

49

有两种修改RestartPolicy的方法:

  • 找出容器ID,停止整个docker服务,修改/var/lib/docker/containers/CONTAINER_ID/hostconfig.json,将RestartPolicy-> Name设置为“ always”,然后启动docker服务。
  • docker commit 将您的容器作为新映像,停止并运行当前容器,然后使用该映像启动一个新容器。

2
停止容器,编辑,启动容器。奇迹般有效。我不知道为什么禁用编辑。
薄雾

2
最后,一个合理的答案:)
纳文

在带docker 1.10的旧服务器上为我工作(不要问😱)。可悲的是只docker update允许在1.11+上修改重启策略
IgorKupczyński19年

1

使用--restart=always策略将在重新启动的情况下处理现有容器的重新启动。

问题是,当您运行多个--restart=always新版本的镜像时,如果有多个容器,如docker中所述-如何禁用容器的自动重启?

尝试通过放置选项自动删除存在的容器时, 策略docker run --rm也会出现问题,--restart=always因为它们彼此冲突

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

因此,在这种情况下,最好选择另一个选项:-- restart,除非已停止策略。

$ docker run --rm --restart unless-stopped <image>

此策略不会与冲突docker run --rm但如docker文档中所述

类似于--restart=always,不同之处在于,当容器停止(手动或其他方式)时,即使重新启动Docker守护程序也不会重新启动容器

因此,在使用此--restart unless-stopped策略时,为确保重新启动在关闭终端时意外停止的情况下可以正常工作,请在另一个终端中执行以下操作:

$ docker ps
$ docker restart <container>

等到杀死进程在上一个shell中结束后,再将其关闭并离开(不要退出)。
然后在剩余的终端中再次检查容器是否仍在运行:

$ docker ps

如果它仍在运行,则可以安全地重新启动并再次检查应用程序是否正在重新启动,并查看您的docker是否干净,而没有使用多个容器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.