如何在docker-compose.yml中使用deploy.replica=0运行服务?

ddrv8njm  于 2022-11-22  发布在  Docker
关注(0)|答案(1)|浏览(207)

我的docker-compose.yml配置中有一些我偶尔会使用的服务,比如端到端测试、脱绒或一些一次性服务。
大致是这样的:

app:
    ...

  e2e-or-linter-or-one-off:
    ...
    deploy:
      replicas: 0

replicas设置为0时,当我只想运行我的常规应用容器时,docker-compose up不会启动e2e-or-linter-or-one-off服务。
当我需要e2e-or-linter-or-one-off服务时,我希望执行以下操作:

docker-compose run e2e-or-linter-or-one-off bash

有没有办法定义一个服务,它不会在docker-compose up上启动,但仍然能够与docker-compose run一起使用?
docker-compose up有一个--scale标志,如果我想加速所有操作,可以使用它,例如:

docker-compose up --scale "e2e-or-linter-or-one-off"=1 e2e-or-linter-or-one-off

但是docker-compose run没有一个类似的标志可以使用,我需要docker-compose run,这样我就可以交互地运行容器。

docker-compose run e2e bash

无法工作,Docker返回:no containers to start
谢谢你的帮忙🙏

wf82jlnq

wf82jlnq1#

This article显示了一种使用复制副本计数环境变量得方法,允许您在调用时更改该值:

app:
    ...

  e2e-or-linter-or-one-off:
    ...
    deploy:
      replicas: ${E2E_REPLICAS:-0}

我对这个例子做了一些修改,这样你就不需要100%地设置env var了。变量expansion中的:-是一个运算符,表示“如果左边的名称未设置或为空,则使用右边的默认值”。
现在运行docker-compose up应该运行每一个定义了1+个副本的服务,但是调用E2E_REPLICAS=1 docker-compose run --rm e2e-or-linter-or-one-off bash将设置env变量,覆盖0的默认值,创建容器&服务,并运行bash。当您完成shell会话时,--rm标记将拆除容器,使环境返回到正常的操作状态。

相关问题