通过覆盖删除Docker-Compose上的服务



我想删除docker-compose.yml文件中定义的容器,当我们用另一个文件docker-compose.prod.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容器,而不是其他容器。

您可能必须切换到版本:3才能执行此操作,我相信版本:2您可以使用"比例"参数,但我不是100%确定的。

无论如何,您可以覆盖"副本"。像这样的参数:

# docker-compose.prod.yml
version: "3"
services: 
  db_for_development:
    deploy:
      replicas: 0

您正在向后

docker -compose.yml->指定将始终运行的所有服务

docker -compose.override.yml->自动拾取,通常用于开发

docker -compose。*。yml->特殊情况

因此,在您的情况下:

您没有删除docker-compose.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->这是产品

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

最后,当您完成管理员时,只需再次运行"生产命令",这将使管理员以孤儿的身份运行,而您不想要它。这就是为什么旗帜 - 示例 - 孔子适用于

假设您要删除(禁用)撰写文件中定义的服务

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"

完成。现在您的容器仍将启动,但使用空图像

禁用了它

这是不可能的。您唯一真正的选择是在运行docker-compose up时(有选择地)指定服务。

通过使用docker中添加的配置文件构成版本'3.9'

,可以解决另一个解决方法

这个想法是,在您的docker-compose.prod.yml中,设置一个虚拟配置文件以供服务删除,并在不指定该配置文件的情况下调用docker compose up。因此,在您的情况下:

# docker-compose.prod.yml
version: '3.9' # make sure the version is at least 3.9
services: 
  db_for_development:
    profiles:
      - dummy-profile

运行docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d根本不会提出db_for_development

在官方文档中可以找到更多有关个人资料工作的示例

最新更新