我可以使用--restart=always
启用自动重启,但在停止容器后,如何关闭该属性?
我通常运行网络服务器,通常映射端口80:
docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash
但有时我想运行我的图像的新版本,但我想保留旧容器。问题是,如果有多个容器--restart=always
,其中只有一个(随机?)启动,因为它们都在主机上争用端口80.
答案 0 :(得分:217)
您可以使用--restart=unless-stopped
选项,如@Shibashis提到的那样,或更新重启策略(这需要docker 1.11或更新版本);
请参阅documentation for docker update
和Docker restart policies。
docker update --restart=no my-container
更新现有容器(my-container
)
答案 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(或系统)后,它会再次自动启动。要解决此问题,请修复容器的命令或使用 no
或 unless-stopped
作为重启策略。
答案 5 :(得分:0)
docker update --restart=yes/no