通过覆盖删除docker-compose上的服务

时间:2017-12-08 16:06:22

标签: docker-compose devops devops-services

当我们使用另一个文件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

实际上,我有wwwdb_for_development在一起。

我只想要www容器,而不是其他容器。

4 个答案:

答案 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 对其进行自定义,例如:

docker-compose.yml -> 这是基础

version: 2
services: 
  www:
    image: php56

docker-compose.override.yml -> 这是 dev

version: 2
services: 
  db_for_development:
    image: mariadb

docker-compose.production.yml -> 这是 prod

version: 2
services: 
  www:
    environment:
      - APP_ENV=production
    env_file:
      - /home/ubuntu/production-app

docker-compose.admin.yml -> 这是给 dba 的

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"

完成。现在,您的容器仍将启动,但是使用空白图片将其禁用