如何仅为服务泊坞窗组成?

时间:2020-07-23 09:35:52

标签: docker docker-compose

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

  • nginx
  • mysql
  • redis
  • 回声
  • php
  • ...

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

  • 工匠
  • 作曲家
  • npm
  • ...

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

1 个答案:

答案 0 :(得分:5)

不幸的是,目前没有方便的方法可以做到这一点。官方推荐的方法是将命令分成自己的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

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

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

更新

compose-spec introduced a new profiles attribute for services将在将来启用此类用例。将其放入docker-compose后,您将可以执行以下操作:

services:
  nginx:
    # ...
  mysql:
    # ...
  composer:
    profiles: ["cli-only"]
    # ...
    # ...
  npm:
    profiles: ["cli-only"]
    # ...
docker-compose up # start main services, no composer and no npm
docker-compose run --rm composer
docker-compose run --rm npm

已经有一个open Pull Request to implement this in docker-compose