返回
创建于
状态公开

如果你在 docker compose 文件中定义了很多服务,但希望只启动部分服务,有以下几种主流做法:

1. 直接指定要启动的服务

你可以在命令行指定要启动的服务名。例如只启动 service1 和 service2:

bash
1docker compose up service1 service2

这样只会启动你指定的服务,其它服务不会启动[1][2]。

2. 使用 profiles 属性进行分组管理

在 docker compose 1.28 及以上版本,可以用 profiles 给服务分组。没有设置 profiles 的服务会默认启动,设置了 profiles 的服务只会在指定 profile 时启动。例如:

yaml
1services:
2  backend:
3    image: backend
4  db:
5    image: mysql
6  debug-tool:
7    image: debug-tool
8    profiles: ["debug"]
  • 只启动默认服务(backend 和 db):

    bash
    1docker compose up
  • 启动带 debug profile 的服务:

    bash
    1docker compose --profile debug up

这样可以灵活地控制哪些服务默认启动,哪些按需启动[3][1][4]。

3. 利用 docker-compose.override.yml 或环境变量

你可以通过 docker-compose.override.yml 文件或环境变量,临时修改某些服务的启动行为(如 entrypoint 设置为 sleep 或 echo),实现“假启动”或不启动的效果,但这种方式一般用于特殊场景[5]。

4. 过滤服务名启动

如果你想排除某些服务,可以用如下命令:

bash
1docker compose config --services | grep -v service_to_exclude | xargs docker compose up

这样可以启动除了指定服务以外的所有服务[6]。

推荐做法:如果你经常需要切换服务组合,建议使用 profiles 属性进行分组管理,最灵活且官方支持[3]。如果只是临时需要,可以直接在命令行指定要启动的服务名[1][2]。

如需进一步细化控制,还可以结合多 compose 文件、环境变量等高级用法。

[1] https://stackoverflow.com/questions/30233105/docker-compose-up-for-only-certain-containers [2] https://www.reddit.com/r/docker/comments/ut43wj/can_you_defined_a_container_in_your_compose_file/ [3] https://docs.docker.com/compose/how-tos/profiles/ [4] https://forums.docker.com/t/exclude-services-from-being-started-with-docker-compose-using-profiles/106076 [5] https://stackoverflow.com/questions/37254881/is-there-any-way-to-disable-a-service-in-docker-compose-yml [6] https://github.com/docker/compose/issues/1294 [7] https://stackoverflow.com/questions/50848797/docker-compose-exclude-service-by-default [8] https://learn.microsoft.com/en-us/visualstudio/containers/launch-profiles?view=vs-2022 [9] https://docs.docker.com/reference/cli/docker/compose/up/ [10] https://event-driven.io/en/docker_compose_profiles/