【问题标题】:docker - how do you disable auto-restart on a container?docker - 你如何禁用容器的自动重启?
【发布时间】:2016-10-02 14:52:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: docker


    【解决方案1】:

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

    请参阅documentation for docker updateDocker restart policies

    docker update --restart=no my-container
    

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

    【讨论】:

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

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

    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 是默认的重启策略,它不会重启一个 任何情况下的容器。当总是指定时, 容器总是重新启动。 on-failure 策略重启容器 如果退出代码指示失败错误。

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

    【讨论】:

    • 投票帮助他人!
    【解决方案3】:

    您可以使用--restart=unless-stopped 启动您的容器。

    【讨论】:

      【解决方案4】:

      如果您有一个 swarm 重新启动容器,该 swarm 将重新启动您停止或 rm 的任何容器,而与重新启动选项无关。这是一项功能,而不是错误。

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

      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.
      • 这给了我一个正确的提示来停止由docker stack deploy ... (hub.docker.com/_/mongo) 启动的mongo-demo_mongo-express 容器。
      【解决方案5】:

      不是对这个问题的回复,而是对How to prevent docker from starting a container automatically on system startup?的回复,该问题已被标记为与该问题重复。

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

      【讨论】:

        【解决方案6】:

        docker update --restart=yes/no

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-25
          • 1970-01-01
          • 2017-02-27
          • 2020-11-11
          • 2016-12-17
          • 1970-01-01
          相关资源
          最近更新 更多