我的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
个
谢谢你的帮忙🙏
1条答案
按热度按时间wf82jlnq1#
This article显示了一种使用复制副本计数环境变量得方法,允许您在调用时更改该值:
我对这个例子做了一些修改,这样你就不需要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
标记将拆除容器,使环境返回到正常的操作状态。