19

当我们使用另一个文件 docker-compose.prod.yml 在组合/覆盖中运行时,我想删除在 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

4 回答 4

12

您可能必须切换到 version: 3 来执行此操作,我相信 version: 2 您可以使用“scale”参数,但我不是 100% 确定。

无论如何,您可以像这样覆盖“副本”参数:

# docker-compose.prod.yml
version: "3"
services: 

  db_for_development:
    deploy:
      replicas: 0
于 2020-10-31T05:52:52.303 回答
6

你正在倒退

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 -> 这是开发

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

最后,当您完成 adminer 后,只需再次运行生产命令,这将使 adminer 作为孤儿运行,您不希望这样。这就是标志 --remove-orphans 的原因

于 2021-07-13T15:00:13.520 回答
1

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

于 2018-12-16T23:52:02.643 回答
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"

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

于 2019-12-21T13:46:34.293 回答