无法创建同一映像docker docker-compose的多个实例

时间:2018-07-24 22:32:44

标签: docker docker-compose

我有一些docker-compose文件来测试不同的环境,例如测试vs开发vs生产。

我的主要问题是使用postgres图像,为每种环境创建不同的数据库。这是两个不同环境的docker-compose.yml文件的示例:

docker-compose.first.yml

version: '3'
services:
  db:

    image: "postgres"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=first
      - POSTGRES_DB=first
    ports:
      - 5432:5432

docker-compose.second.yml

version: '3'
services:
  db:

    image: "postgres"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=second
      - POSTGRES_DB=second
    ports:
      - 5432:5432

如果我执行docker-compose -f docker-compose.first.yml up,我希望它与第一个docker-compose文件的先前卷一起构建。

如果我执行docker-compose -f docker-compose.second.yml up,我希望它使用 second docker-compose文件的卷。

现在,行为是这些文件中的每个文件将使用相同的卷,因此除非我在使用第二个文件之前执行docker-compose -f docker-compose.first.yml -v down,否则不会有任何更改,并且我会丢失这些卷第一个!如何将它们分开?

注意:这些文件位于同一目录中,这有区别吗?

1 个答案:

答案 0 :(得分:0)

在研究了相同目录的docker-compose文件后,这里的答案是名称决定了将重新创建还是重新创建容器,并确定其使用的卷。

默认情况下,Docker-compose使用目录名称作为“ compose project name”,因此该名称可以是mytestproject_db_1,因为它使用了project-name_container-name_numerator。由于撰写文件位于同一目录中,因此它们的名称相同,因为所有因素都没有改变。

要解决此问题,请使用-p选项手动更改“撰写项目名称”,因此我可以执行docker-compose up -p test-myappdocker-compose up -p prod-myapp以确保不会链接撰写文件。< / p>

更多信息:https://github.com/docker/compose/issues/2120