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


156

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

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

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

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

Answers:


325

您可以使用该--restart=unless-stopped选项(如@Shibashis所述),或更新重启策略(这需要docker 1.11或更高版本);

请参阅文档docker update以及Docker重新启动策略

docker update --restart=no my-container

更新现有容器的重启策略(my-container


69
使用docker update --restart=no $(docker ps -a -q)更新所有容器:-)
马克Mooibroek


22

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

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是默认的重新启动策略,在任何情况下都不会重新启动容器。如果指定了always,则容器将始终重新启动。如果退出代码指示失败时错误,则失败时策略将重新启动容器。

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

restart: always

12

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

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

docker service ls

然后,您可以停止服务

docker service rm <service id discovered with previous command>

ls结果出错Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa
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.