在我的docker-compose.yml
文件中,我有很多服务:
还有docker-compose run --rm
中使用的一些CLI实用程序:
启动系统时,我会执行docker-compose up
。不幸的是,这也尝试启动所有的CLI实用程序。有没有办法在我的docker-compose中将这两个类别分开?
答案 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