我可以使用——restart=always启用自动重启,但在我停止容器后,如何关闭该属性?
我通常运行一个web服务器,通常映射端口80:
docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash
但有时我想运行映像的新版本,但又想保留旧的容器。问题是,如果有多个容器使用——restart=always,那么只有一个容器(随机?)启动,因为它们都在争夺主机上的80端口。
我可以使用——restart=always启用自动重启,但在我停止容器后,如何关闭该属性?
我通常运行一个web服务器,通常映射端口80:
docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash
但有时我想运行映像的新版本,但又想保留旧的容器。问题是,如果有多个容器使用——restart=always,那么只有一个容器(随机?)启动,因为它们都在争夺主机上的80端口。
当前回答
只更新活动运行的容器
Docker更新——restart=no $(Docker ps -q)
其他回答
你可以使用——restart=unless-stopped来启动容器。
使用下面的方法禁用所有自动重启(守护进程)容器。
docker update --restart=no $(docker ps -a -q)
使用以下命令禁用重新启动单个容器。
docker update --restart=no the-container-you-want-to-disable-restart
理由是:
Docker提供了重启策略来控制容器退出时自动启动,还是Docker重启时自动启动。当Docker正在运行一个关键服务时,这通常非常有用。
笔记
如果您正在使用docker-compose,了解这一点可能会很有用。
“Restart no”是缺省的重启策略,不重启 容器在任何情况下。当指定always时, 容器总是重新启动。on-failure策略重新启动容器 如果退出代码指示失败时错误。
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
restart: always
你可以使用——restart=unless-stopped选项,就像@Shibashis提到的,或者更新重启策略(这需要docker 1.11或更新版本);
请参阅docker更新和docker重启策略的文档。
docker update --restart=no my-container
更新现有容器的重启策略(my-container)
如果你有一个蜂群重新启动容器,蜂群将重新启动你停止或rm的任何容器,不管重启选项如何。这是一个特性,不是bug。
确保你没有在运行一个你忘记的服务:
docker service ls
然后停止服务
docker service rm <service id discovered with previous command>
只更新活动运行的容器
Docker更新——restart=no $(Docker ps -q)