我看到Docker已经添加了一些叫做重启策略的东西来处理容器的重新启动,例如,重新启动。

虽然这是非常有用的,我看到重启策略命令只适用于docker run而不是docker start。所以我的问题是:

是否有办法将重新启动策略添加到过去已经创建的容器中?


有两种方法可以修改RestartPolicy:

找到容器ID,停止整个docker服务,修改/var/lib/docker/containers/ container_id /hostconfig。设置RestartPolicy -> Name为“always”,启动docker服务。 Docker将你的容器作为一个新的镜像提交,停止并rm当前的容器,然后用这个镜像启动一个新的容器。


在docker的最新版本中(从1.11开始),你有一个update命令:

docker update --restart=always <container>

使用——restart=always策略将在重新引导时处理现有容器的重新启动。

问题是,当你运行docker中讨论的新版本的映像时,如果有多个容器使用——restart=always,你如何禁用容器上的自动重启?

试图自动删除容器时,它存在的put 选项docker run——rm在使用——restart=always时也会出现问题 政策,因为他们相互冲突。

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

所以在这种情况下,最好选择另一个选项:——restart unless-stopped policy。

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

此策略不会与docker run——rm冲突,但如docker文档所述:

它类似于——restart=always,不同的是当容器停止时 (手动或其他方式),即使在Docker守护进程之后,它也不会重新启动 将重新启动。

因此,当使用这个——restart unless-stopped策略时,为了确保重新启动在关闭终端时意外停止的情况下正常工作,在另一个终端执行一次,如下所示:

$ docker ps
$ docker restart <container>

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

$ docker ps

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