如何通过Docker Compose创建两个PostgreSQL容器:开发与测试环境
最优实现方案:Docker Compose 多环境隔离配置
针对开发、测试环境的 PostgreSQL 容器隔离需求,推荐两种高效实现方式,可根据场景选择:
方案一:Profiles + 多环境变量文件(推荐,低维护成本)
通过 Compose Profiles 区分环境,配合独立的.env文件加载专属配置,复用大部分容器定义,仅通过变量差异实现隔离。
1. 修改 docker-compose.yml
version: "3.7" services: postgres-dev: profiles: ["dev"] container_name: ${CONTAINER_NAME} image: postgres:13 restart: always environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} volumes: - postgres-dev:/var/lib/postgresql/data ports: - "${HOST_PORT}:5432" postgres-test: profiles: ["test"] container_name: ${CONTAINER_NAME} image: postgres:13 restart: always environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} volumes: - postgres-test:/var/lib/postgresql/data ports: - "${HOST_PORT}:5432" volumes: postgres-dev: postgres-test:
2. 创建环境变量文件
.env.dev(开发环境配置)
CONTAINER_NAME=mydevdb POSTGRES_USER=dev_user POSTGRES_PASSWORD=dev_pass POSTGRES_DB=dev_db HOST_PORT=5432
.env.test(测试环境配置)
CONTAINER_NAME=mytestdb POSTGRES_USER=test_user POSTGRES_PASSWORD=test_pass POSTGRES_DB=test_db HOST_PORT=5433
3. 启动/停止命令
- 启动开发环境:
docker-compose --env-file .env.dev --profile dev up -d - 启动测试环境:
docker-compose --env-file .env.test --profile test up -d - 停止对应环境:
docker-compose --profile dev down(替换dev为test即可停止测试环境)
方案二:独立 Compose 文件(适合环境差异较大场景)
如果开发、测试环境除基础配置外,还有镜像版本、附加服务等差异,可直接编写独立的 Compose 文件:
docker-compose.dev.yml(开发环境)
version: "3.7" services: postgres: container_name: mydevdb image: postgres:13 restart: always environment: - POSTGRES_USER=dev_user - POSTGRES_PASSWORD=dev_pass - POSTGRES_DB=dev_db volumes: - postgres-dev:/var/lib/postgresql/data ports: - "5432:5432" volumes: postgres-dev:
docker-compose.test.yml(测试环境)
version: "3.7" services: postgres: container_name: mytestdb image: postgres:13 restart: always environment: - POSTGRES_USER=test_user - POSTGRES_PASSWORD=test_pass - POSTGRES_DB=test_db volumes: - postgres-test:/var/lib/postgresql/data ports: - "5433:5432" volumes: postgres-test:
启动/停止命令
- 开发环境:
docker-compose -f docker-compose.dev.yml up -d - 测试环境:
docker-compose -f docker-compose.test.yml up -d
核心优势说明
- 数据完全隔离:两个环境使用独立的 Docker Volume,避免数据互相污染
- 配置解耦:环境专属配置集中在.env文件或独立Compose文件,修改无需改动核心容器定义
- 灵活扩展:方案一支持同时启动两个环境(需确保端口不冲突),方案二更适合复杂环境定制
内容的提问来源于stack exchange,提问作者Khaled Developer
相关产品推荐
相关产品推荐

