如何禁用容器上的自动重启?

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

我通常运行一个web服务器,通常映射端口80:

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

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

123595 次浏览

你可以用--restart=unless-stopped开始你的容器。

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

参见docker update的文档Docker重启策略

docker update --restart=no my-container

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

如果你有一个蜂群重新启动容器,蜂群将重新启动你停止或rm的任何容器,不管重启选项如何。这是一个特性,不是bug。

确保你没有在运行一个你忘记的服务:

docker service ls

然后停止服务

docker service rm <service id discovered with previous command>

使用下面的方法禁用所有自动重启(守护进程)容器。

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

不是对这个问题的回答,而是对如何防止docker在系统启动时自动启动容器?的回答,它被标记为这个问题的重复。

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

docker update——restart=yes/no <

只更新活动运行的容器

Docker更新——restart=no $(Docker ps -q)

修改所有docker容器的重启策略。

识别将在引导时启动的docker容器

这个shell脚本将识别所有重启策略不是“&;no&;”的docker容器。

作为根用户

CONTAINERS=$(for f in  /var/lib/docker/containers/*/hostconfig.json ;
do
container=`echo $f | rev | cut -d '/' -f 2| rev`
jq \
--arg container "$container" \
--arg file "$f" '{"RestartPolicy":.RestartPolicy.Name, 'file':$file, 'container':$container} | select(.RestartPolicy != "no")' "$f" | \
jq .container -r | tr '\n' ' '
done)


或NON-root…

CONTAINERS=$(for f in  $(sudo sh -c "ls /var/lib/docker/containers/*/hostconfig.json");
do
container=`echo $f | rev | cut -d '/' -f 2| rev`
sudo jq \
--arg container "$container" \
--arg file "$f" '{"RestartPolicy":.RestartPolicy.Name, 'file':$file, 'container':$container} | select(.RestartPolicy != "no")' "$f" | \
jq .container -r | tr '\n' ' '
done)

(可选)查看所选容器的列表

echo $CONTAINERS

将所有容器设置为“不”;在一次。

docker update --restart=no $CONTAINERS