docker - 如何在容器上禁用自动重启?

时间:2016-06-02 18:03:51

标签: docker

我可以使用--restart=always启用自动重启,但在停止容器后,如何关闭该属性?

我通常运行网络服务器,通常映射端口80:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

但有时我想运行我的图像的新版本,但我想保留旧容器。问题是,如果有多个容器--restart=always,其中只有一个(随机?)启动,因为它们都在主机上争用端口80.

6 个答案:

答案 0 :(得分:217)

您可以使用--restart=unless-stopped选项,如@Shibashis提到的那样,或更新重启策略(这需要docker 1.11或更新版本);

请参阅documentation for docker updateDocker restart policies

docker update --restart=no my-container

更新现有容器(my-container

的restart-policy

答案 1 :(得分:28)

您可以使用--restart=unless-stopped启动容器。

答案 2 :(得分:6)

使用以下内容禁用所有自动重启(守护程序)容器。

docker update --restart=no $(docker ps -a -q)

使用以下命令禁用重新启动SINGLE容器。

docker update --restart=no the-container-you-want-to-disable-restart

理性

Docker提供了重启策略来控制您的容器在退出时还是在Docker重新启动时自动启动。当Docker运行关键服务时,这通常非常有用。

注释

如果您使用的是docker-compose,这可能会很有帮助。

  

restart no是默认的重启策略,它不会重启   任何情况下的容器。当始终指定时,   容器始终重新启动。失败策略将重新启动容器   如果退出代码指示失败错误。

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always

答案 3 :(得分:1)

如果您有一群重新启动容器的容器,则无论重新启动选项如何,该群都会重新启动您停止或运行的所有容器。这是一个功能,而不是错误。

确保您没有运行忘记的服务:

docker service ls

然后,您可以停止服务

docker service rm <service id discovered with previous command>

答案 4 :(得分:0)

不是对这个问题的回答,而是对 How to prevent docker from starting a container automatically on system startup? 的回答,它被标记为这个问题的重复。

如果您的容器以 restart=on-failure 启动并且有一个错误的命令,当您使用 docker stop 停止容器时,该命令以非零退出代码退出,它会显示一些奇怪的行为:停止容器后使用docker stop,容器停止,但在重新启动docker daemon(或系统)后,它会再次自动启动。要解决此问题,请修复容器的命令或使用 nounless-stopped 作为重启策略。

答案 5 :(得分:0)

docker update --restart=yes/no