当覆盖服务时,Docker Compose会孤立容器。

15

我希望有两个docker-compose文件,其中一个覆盖另一个。
(该想法来源于Docker Compose文档)
使用案例是来自buildbot环境。第一个docker-compose文件应该定义一个简单的服务。这是一个将要被测试的服务。让我们来理解一下

version: '2'
services:
  service-node:
    build:
      context: ./res
      dockerfile: Dockerfile
    image: my/server
    env_file: .env

第二个 docker-compose 文件(我们将其命名为 docker-compose.test.yml)覆盖了 service-node,添加了 buildbot 工作器功能,并创建了第二个容器,即将控制测试机械的 buildbot 主节点。让我们来看一下。

version: '2'
services:
  service-node:
    build:
      context: ./res
      dockerfile: buildbot.worker.Dockerfile
    image: my/buildbot-worker
    container_name: bb-worker
    env_file: ./res/buildbot.worker.env
    environment:
      - BB_RES_DIR=/var/lib/buildbot
    networks:
      testlab:
        aliases:
          - bb-worker
    volumes:
      - ./vol/bldbot/worker:/home/bldbotworker
    depends_on:
      - bb-master

  bb-master:
    build:
      context: ./res
      dockerfile: buildbot.master.Dockerfile
    image: my/buildbot-master
    container_name: bb-master
    env_file: ./res/buildbot.master.env
    environment:
      - BB_RES_DIR=/var/lib/buildbot
    networks:
      - testlab
    expose:
      - "9989"
    volumes:
      - ./vol/bldbot/master:/var/lib/buildbot

networks:
  testlab:
    driver: bridge

通常情况下这个配置是有效的,即该命令

docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d 

构建镜像和运行容器,但存在一个缺点,即该命令

docker-compose ps

只显示一个服务,即bb-worker。同时

docker ps

展示两者。
此外,该命令

docker-compose down

仅停止一个服务,并输出消息/警告找到孤立的容器。当然,该消息是指bb-master。

我如何覆盖基本的docker-compose.yml文件以能够添加其他非孤立服务?

1个回答

26

你需要在运行所有 docker-compose 命令时带上标志,例如:

docker-compose -f docker-compose.yml -f docker-compose.test.yml down

你可以通过在同一文件夹中写入以下内容到.env文件中,将其设为默认值:

COMPOSE_FILE=docker-compose.yml:docker-compose.test.yml

注意:

在Windows中,你需要使用";"作为分隔符 (@louisvno)


1
太棒了。有时候最明显的解决方案就在眼前,但我们却看不到它们。谢谢你。它像魔法一样运行。 - utom
所以,我之前一直在焦虑,直到看到这个答案。太好了! - xleon
1
给Windows用户的一个小提示,分隔符应该用;而不是:。 - louisvno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接