禁用 docker-compose 项目的自动启动

Posted

技术标签:

【中文标题】禁用 docker-compose 项目的自动启动【英文标题】:Disable autostart of docker-compose project 【发布时间】:2017-04-23 12:10:00 【问题描述】:

我有一个使用 Docker for Mac 的 docker-compose 项目,它会在我启动计算机时自动启动。

我通常使用docker-compose up -d 启动项目,但即使在关闭之前运行docker-compose stop 也会在启动时再次自动启动。

我不知道专门启用此功能。如何禁用它?

【问题讨论】:

我们能看到 docker-compose 文件吗?但我猜里面有一个restart: always。如果有,请尝试将其更改为restart: unless-stopped 确实,每个服务都有restart: always。我会改变它,看看会发生什么。 那行不通。设置 restart: unless-stopped 会导致 docker 请求超时(psstopkill)。并且重新启动仍然会启动所有容器! 不确定docker-compose stop,但对我来说docker-compose down 就像一个魅力。我倾向于将它与--rmi local 配对,但要小心。 【参考方案1】:

今天我遇到了同样的问题,当我启动我的开发笔记本电脑时,所有容器都启动了,因为在 .yml 文件中设置了restart: always

由于我不想接触 .yml 文件,我刚刚发现(感谢 Bobby)如何通过以下方式更改此设置:

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

【讨论】:

这在您丢失.yml/或项目时也很有用:P 你也可以像这样获取当前的重启策略:docker inspect --format='.HostConfig.RestartPolicy.Name' &lt;MY-CONTAINER-ID&gt;【参考方案2】:

尝试使用docker-compose down 而不是docker-compose stop

down

停止容器并删除由 up 创建的容器、网络、卷和映像。 定义为外部的网络和数量永远不会删除

stop

停止运行容器而不删除它们。可以使用docker-compose start 重新启动它们。

【讨论】:

这有删除东西的意外后果。从头开始的创建时间对我来说是 20 分钟,所以这不是一个选项。 这会删除数据。在许多情况下可能是数据库,因此在许多情况下这可能不是一个好的解决方案。 需求只是禁用自动启动(重新启动),所以如果你做一个docker-compose down会破坏所有数据,最好的方法是#davey说docker update --restart=no &lt;MY-CONTAINER-ID&gt;【参考方案3】:

restart: no 是默认模式。在您的 docker-compose 文件中有一行带有 restart: norestart: unless-stopped。这也意味着当您启动系统时,只要 docker 守护程序,它就会再次(重新)启动容器。 Details 您需要restart更改为noon-failure示例

version: '2.1'
services:
    backend:
        restart: on-failure
        build:
            args:
                USER_ID: $USER_ID
            context: codebase/namp-backend
            dockerfile: Dockerfile.dev
        ports:
          - "5001:5001"
          - "5851:5851"
        volumes:
          - ./codebase/namp-backend:/codebase
        environment:

在大多数情况下,docker-compose down 也会为您提供相同的结果 - 不要在 (docker) 系统启动时启动容器,除了:容器将在此之后被删除,不会停止。

【讨论】:

no是默认的重启策略,在任何情况下都不重启容器。当指定 always 时,容器总是重新启动。如果退出代码指示出现故障时,故障时策略会重新启动容器。【参考方案4】:

如果要停止特定容器,请使用以下命令:

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

如果你想停止所有注册的容器,这是最好的选择:

docker update --restart=no $(docker container ls -a -q)

谢谢

【讨论】:

【参考方案5】:

除了设置restart: unless-stopped,删除现有容器并重新创建它们。

docker-compose down
docker-compose up -d

现在,它会按预期工作:

docker-compose stop
sudo service docker restart
docker-compose ps
# should NOT HAVE containers running

docker-compose up -d
sudo service docker restart
docker-compose ps
# should HAVE containers running

【讨论】:

以上是关于禁用 docker-compose 项目的自动启动的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose 启动容器

docker-compose内mysql 挂载数据库目录,启动时mysql容器自动退出

docker-compose部署dubbo+zookeeper项目

linux 网卡开机自动禁用

docker-compose在dockerfile更新后自动更新image

怎么禁止开机自动启动软件