如何仅针对服务进行 docker-compose up?

now*_*wox 5 docker docker-compose

在我的docker-compose.yml文件中,我有很多服务:

  • nginx
  • mysql
  • Redis
  • 回声
  • php
  • ...

还有一些我使用的 CLI 实用程序docker-compose run --rm

  • 工匠
  • 作曲家
  • 新产品经理
  • ...

当我启动我的系统时,我会这样做docker-compose up。不幸的是,这也尝试启动所有 CLI 实用程序。有没有办法在我的 docker-compose 中将这两个类别分开?

acr*_*ran 8

更新

docker-compose1.28.0开始,新的服务配置文件就是为此而制作的!随着profiles您可以标记服务只在启动特定的配置文件:

services:
  nginx:
    # ...
  mysql:
    # ...
  composer:
    profiles: ["cli-only"]
    # ...
    # ...
  npm:
    profiles: ["cli-only"]
    # ...
Run Code Online (Sandbox Code Playgroud)
docker-compose up # start main services, no composer and no npm
docker-compose run --rm composer
docker-compose run --rm npm
Run Code Online (Sandbox Code Playgroud)

原答案

不幸的是,目前没有方便的方法来做到这一点。官方推荐的方法是将您的命令分成自己的docker-compose.yml

# start all your services
docker-compose up

# execute a defined command in docker-compose.cli.yml
docker-compose -f docker-compose.cli.yml run npm update

# if your command depends_on a service you need to merge the configs
docker-compose -f docker-compose.yml -f docker-compose.cli.yml run npm update
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml使用-f标志指定多个文件会将它们合并在一起,请参阅文档。这允许您依赖在另一个文件中定义的服务/网络/卷。

有关整个问题的深入讨论,请参阅docker/compose#1896