如果我在docker-compose项目中定义了很多服务,如何从默认的docker-compose up
命令中排除服务?
例如,我有一个nginx服务和一个ssl服务。它们冲突是因为它们都消耗端口80,所以除非我专门运行该服务,否则如何才能使ssl服务无法启动,默认情况下up
命令将执行除ssl服务之外的所有操作?< / p>
答案 0 :(得分:16)
从 docker-compose
1.28.0 开始,新的 service profiles 就是为此而生的!使用 profiles
,您可以将服务标记为仅在特定配置文件中启动,例如:
services:
webapp:
# ...
nginx:
# ...
profiles: ["nginx"]
ports:
- 80:80
ssl:
# ...
profiles: ["ssl"]
ports:
- 80:80
docker-compose up # start only your webapp services
docker-compose --profile nginx up # start the webapp and nginx service
docker-compose --profile ssl up # start the webapp and ssl service
docker-compose run ssl # run the ssl service
根据您的具体用例/设置,但最好将您的服务拆分为 multiple docker-compose.yml
files。
答案 1 :(得分:4)
不完全是您要查找的内容,但您可以使用scale标记将您的ssl服务扩展为零:
docker-compose up --scale ssl_service=0
另一种选择是拥有多个撰写文件并使用-f
标志运行docker以启动特定服务。
答案 2 :(得分:0)
嘿,我今天在github上遇到了这个问题: “定义默认情况下未启动的服务” https://github.com/docker/compose/issues/1896
好吧,你不能。但是,由于我有很多服务并添加了更多服务,所以我已经完成了此解决方法。我仅使用一些虚拟图像和自定义命令进行了虚拟服务,然后将所需的服务设置为依赖项:
main-services:
image: docker4w/nsenter-dockerd # you want to put there some small image
command: sh -c "echo start"
depends_on:
- postgres
- consumer-backend
- prisma
- api-gateway
- adminer
- frontend
然后我写了我的readme.md:
使用它来运行所有内容
docker-compose up -d main-services
创建数据库结构
docker-compose up deploy
包含数据的种子数据库
docker-compose up seed
使用虚拟服务对事物进行分组比到目前为止所见的任何其他事情都容易。