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

Bra*_*som 119 docker

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

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

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash
Run Code Online (Sandbox Code Playgroud)

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

tha*_*tah 266

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

请参阅文档docker updateDocker重启策略.

docker update --restart=no my-container
Run Code Online (Sandbox Code Playgroud)

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

  • 使用`docker update --restart = no $(docker ps -a -q)`来更新所有容器:-) (50认同)
  • 如果 docker 由于某些容器自动启动并导致问题而停止并且无法启动,您可以在 docker off 的情况下执行此操作: `sed s@always@no@ -i /var/lib/docker/containers/*/hostconfig.json ` (6认同)

Fly*_*ngV 51

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

docker update --restart=no $(docker ps -a -q)
Run Code Online (Sandbox Code Playgroud)

使用以下命令禁用重启单个容器。

docker update --restart=no the-container-you-want-to-disable-restart
Run Code Online (Sandbox Code Playgroud)

理性

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

笔记

如果您正在使用 docker-compose,这可能很有用。

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

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

restart: always
Run Code Online (Sandbox Code Playgroud)


Shi*_*his 31

你可以用你的容器启动--restart=unless-stopped.


nac*_*bar 7

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

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

docker service ls
Run Code Online (Sandbox Code Playgroud)

然后,您可以停止服务

docker service rm <service id discovered with previous command>
Run Code Online (Sandbox Code Playgroud)

  • `ls` 导致错误`来自守护程序的错误响应:此节点不是 swarm 管理器。使用“docker swarm init”或“docker swarm join”将此节点连接到 swarm,然后重试。 (2认同)