禁用 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 请求超时(ps
、stop
、kill
)。并且重新启动仍然会启动所有容器!
不确定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' <MY-CONTAINER-ID>
【参考方案2】:
尝试使用docker-compose down
而不是docker-compose stop
down
停止容器并删除由 up 创建的容器、网络、卷和映像。 定义为外部的网络和数量永远不会删除。
stop
停止运行容器而不删除它们。可以使用docker-compose start
重新启动它们。
【讨论】:
这有删除东西的意外后果。从头开始的创建时间对我来说是 20 分钟,所以这不是一个选项。 这会删除数据。在许多情况下可能是数据库,因此在许多情况下这可能不是一个好的解决方案。 需求只是禁用自动启动(重新启动),所以如果你做一个docker-compose down
会破坏所有数据,最好的方法是#davey说docker update --restart=no <MY-CONTAINER-ID>
【参考方案3】:
restart: no
是默认模式。在您的 docker-compose 文件中有一行带有 restart: no
或 restart: unless-stopped
。这也意味着当您启动系统时,只要 docker 守护程序,它就会再次(重新)启动容器。 Details
您需要将restart
更改为no
或on-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内mysql 挂载数据库目录,启动时mysql容器自动退出
docker-compose部署dubbo+zookeeper项目