【问题标题】:Ignoring the restart policy for running on-off commands on the same docker image used for long-running services忽略在用于长时间运行服务的同一 docker 映像上运行开关命令的重启策略
【发布时间】:2019-09-24 02:49:21
【问题描述】:

我正在使用该选项在我的 docker-compose 文件中重新启动我的 docker 实例,例如:

restart: always

问题是有时我会运行一个 docker 容器进行维护工作,例如:

docker-compose run rails rake db:migrate 

问题在于,当我执行“docker ps”时,我可以看到那些开关命令仍在运行并不断重启:

"rake db:migrate" 2 天前 重启 (7) 18 秒 以前

有没有办法运行一个用于开关目的的 docker 映像,但仍然有重启策略,但在这种单实例使用时会以某种方式忽略它?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    一旦 docker 镜像运行(在 docker-compose run 之后),you could amend it,使用 docker update

    docker update --restart=no <MY-CONTAINER-ID>
    

    这将阻止所述容器在您停止它时重新启动。
    restart policies

    【讨论】:

      【解决方案2】:

      只需在您的 docker-compose.yml 文件中创建另一个使用相同 docker 映像的服务,但将 restart 设置为 restart: "no"

      虚拟示例:

      version: "2.1"
      
      services:
      
        rake_web:
          image: rake-image-name
          restart: always
          networks:
            - rake_network
      
        rake_cli:
          image: rake-image-name
          restart: "no"
          networks:
            - rake_network
      
      networks:
        rake_network:
          driver: "bridge"
      

      现在代替:

      docker-compose run rake_web some-command
      

      你使用:

      docker-compose run rake_cli some-command
      

      一旦 rake_cli 使用相同的 docker 映像,但在禁用重启策略的情况下,rake_cli 的容器在运行命令后将不会重启。

      【讨论】:

        【解决方案3】:

        您可以在撰写中使用 container_name 指令来指定名称,例如,

        container_name: mycontainer
        

        然后,运行,

        docker-compose run rails rake db:migrate && docker update --restart=no mycontainer
        

        如果您的 compose 文件中有多个容器,您可以对那些不需要重新启动的容器执行此操作。

        docker-compose run rails rake db:migrate && docker update --restart=no mycontainer1 && docker update --restart=no mycontainer2
        

        您可以在 shell 脚本中使用它。还有其他方法,例如使用 sed 创建一个没有重启指令的临时撰写文件。但我认为,上面的选项是最干净的。

        【讨论】:

          【解决方案4】:

          Docker 提供restart policies 来控制容器是在退出时自动启动,还是在 Docker 重新启动时自动启动。重启策略确保链接容器以正确的顺序启动。 Docker 建议您使用重启策略,避免使用进程管理器来启动容器。

          重启策略与dockerd 命令的--live-restore 标志不同。使用 --live-restore 可以让您在 Docker 升级期间保持容器运行,尽管网络和用户输入会中断。

          Source

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-07-15
            • 1970-01-01
            • 2013-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多