我有一些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
,否则不会有任何更改,并且我会丢失这些卷第一个!如何将它们分开?
注意:这些文件位于同一目录中,这有区别吗?
答案 0 :(得分:0)
在研究了相同目录的docker-compose文件后,这里的答案是名称决定了将重新创建还是重新创建容器,并确定其使用的卷。
默认情况下,Docker-compose使用目录名称作为“ compose project name”,因此该名称可以是mytestproject_db_1,因为它使用了project-name_container-name_numerator。由于撰写文件位于同一目录中,因此它们的名称相同,因为所有因素都没有改变。
要解决此问题,请使用-p选项手动更改“撰写项目名称”,因此我可以执行docker-compose up -p test-myapp
或docker-compose up -p prod-myapp
以确保不会链接撰写文件。< / p>