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

73

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

通常我会使用docker-compose up -d来启动该项目,但即使在关闭前执行docker-compose stop,它仍会在开机时自动启动。

我不知道是否有特别的启用方法。如何禁用它?


5
我们可以看一下docker-compose文件吗?但我猜想里面有一个restart: always。如果有的话,请尝试将其更改为restart: unless-stopped - Rickkwa
确实,每个服务都有 restart: always。我会进行更改并观察结果。 - Harald Nordgren
那个不起作用。设置restart: unless-stopped会导致docker在请求(psstopkill)超时。重启仍然会启动所有容器! - Harald Nordgren
1
我不确定docker-compose stop是否有效,但对我来说docker-compose down非常有效。我倾向于将其与--rmi local一起配对使用,但请小心。 - Jack M.
6个回答

83

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

由于我不想更改.yml文件,所以我找到了一个方法(感谢Bobby),可以通过以下方式更改此设置:

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

1
当你不小心丢失了.yml文件或整个项目时,这也非常有用 :P - JPG
你也可以通过以下方式获取当前的重启策略:docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' <MY-CONTAINER-ID> - yohosuff

22

restart: no 是默认模式。若你的 docker-compose 文件中有 restart: norestart: unless-stopped 这些语句,启动系统时,只要 Docker daemon 存在,它就会重新启动容器。 详情
你需要将 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) 系统启动时启动容器,但会在此之后删除容器,而不是停止容器。


1
no是默认的重启策略,它不会在任何情况下重新启动容器。当指定为always时,容器总是会重新启动。on-failure策略会在退出代码指示出现on-failure错误时重新启动容器。 - Akshay barahate

19

建议使用docker-compose down命令代替docker-compose stopdown命令将停止容器,并删除由up创建的容器、网络、卷和镜像。作为外部定义的网络和卷不会被删除

stop命令将停止运行中的容器但不会删除它们,可以使用docker-compose start重新启动容器。


11
这会意外地导致删除东西。对我来说,从头开始创建需要20分钟,所以这不是一个选择。 - Harald Nordgren
2
这将删除数据。在许多情况下可能是数据库,因此在许多情况下可能不是一个好的解决方案。 - Daniel Benedykt
需求只是禁用自动启动(重新启动),因此如果您执行 docker-compose down,将销毁所有数据,最好的方法是像 #davey 所说的那样执行 docker update --restart=no <MY-CONTAINER-ID> - Sham Fiorin

11
如果您想在停止特定容器后禁用自动启动,请使用以下命令:
docker update --restart=no <MY-CONTAINER-ID>

如果你想将此设置应用于所有已注册的容器,这是最佳选择:
docker update --restart=no $(docker container ls -a -q)

谢谢您

其他有用的命令:docker container ls -a 用于检查容器的名称和ID, 以及 docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' <nameOrId> 用于检查它们当前的设置。 - undefined

2
除了设置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

1

针对 @Hudson Van-dal 的评论,如果你真的在使用compose,这里有一个补充。当你在.yml compose文件目录中时,你可以使用以下命令:

docker update --restart=no $(docker compose ps -a -q)

它将仅过滤出在此特定组合下运行的容器,而不是所有可用容器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接