当我们使用另一个文件docker-compose.prod.yml在composition / override中运行时,我想删除docker-compose.yml文件中定义的容器,例如:
# docker-compose.yml
version: 2
services:
www:
image: php56
db_for_development:
image: mariadb
覆盖:
# docker-compose.prod.yml
version: 2
services:
www:
image: php70
db_for_development:
[control: override-and-remove] # hypothesis
然后,在跑步时:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker-compose -f docker-compose.yml -f docker-compose.prod.yml ps
实际上,我有www
和db_for_development
在一起。
我只想要www
容器,而不是其他容器。
答案 0 :(得分:2)
您可能必须切换到版本:3,我相信版本:2您可以使用“ scale”参数,但我不确定100%。
无论如何,您可以像这样覆盖“ replicas”参数:
# docker-compose.prod.yml
version: "3"
services:
db_for_development:
deploy:
replicas: 0
答案 1 :(得分:1)
这是不可能的。您唯一的实际选择是在运行docker-compose up
时(有选择地)指定服务。
答案 2 :(得分:1)
你正在倒退
docker-compose.yml -> 指定将一直运行的所有服务
docker-compose.override.yml -> 自动拾取,通常用于开发
docker-compose.*.yml -> 特殊情况
所以,就你而言:
您不会删除 docker-compose.yml 中定义的容器,而是通过使用另一个文件覆盖添加它或使用 docker-compose.prod.yml 对其进行自定义,例如:
version: 2
services:
www:
image: php56
version: 2
services:
db_for_development:
image: mariadb
version: 2
services:
www:
environment:
- APP_ENV=production
env_file:
- /home/ubuntu/production-app
version: 2
services:
adminer:
image: adminer
restart: always
ports:
- 8080:8080
对于开发,docker-compose.yml 和 docker-compose.override.yml 将通过运行使用
$ docker-compose up
制作,手动指定两个文件
$ docker-compose -f docker-compose.yml -f docker-compose.production.yml up --remove-orphans
如果你想带也带管理员(不推荐用于生产,但有时还是需要的)
$ docker-compose -f docker-compose.yml -f docker-compose.production.yml -f docker-compose.admin.yml up
最后,当您使用完 adminer 后,只需再次运行 production 命令,这将使 adminer 作为孤儿运行,而您不希望那样。这就是为什么标志 --remove-orphans 是为了
答案 3 :(得分:0)
假设您要删除(禁用)撰写文件中定义的服务
docker-compose.yml
version: "3.4"
services:
app:
restart: always
image: "rasa/rasa-x-demo:${RASA_X_DEMO_VERSION}"
expose:
- "5055"
depends_on:
- rasa-production
docker-compose.override.yml
version: "3.4"
services:
app:
image: alpine:latest
command: "true"
entrypoint: "true"
完成。现在,您的容器仍将启动,但是使用空白图片将其禁用