默认情况下,Docker-compose 排除服务



如果我在docker-compose项目中定义了大量服务,如何从默认的docker-compose up命令中排除服务?

例如,我有一个nginx服务和一个SSL服务。 它们冲突是因为它们都使用端口 80,那么我怎样才能使 ssl 服务不会启动,除非我专门运行该服务,默认情况下,up命令将执行除 ssl 服务之外的所有操作?

docker-compose1.28.0 开始,新的服务配置文件就是为此而制作的!使用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

但是,根据您的确切用例/设置,最好将服务拆分为多个docker-compose.yml文件。

不完全是您要查找的内容,但您可以使用 scale 标志将 ssl 服务扩展到零:

docker-compose up --scale ssl_service=0

另一种选择是拥有多个撰写文件并使用-f标志运行 docker 以启动特定服务。

嘿,我今天在 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的种子数据库

使用虚拟服务对事物进行分组比我迄今为止见过的任何其他服务都容易。

最新更新