You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在docker-compose up时创建两个PostgreSQL数据库?

解决方案

方法一:单PostgreSQL容器中创建双数据库

PostgreSQL官方镜像会自动执行/docker-entrypoint-initdb.d目录下的SQL脚本,可利用这一特性创建第二个数据库:

  1. 创建初始化脚本
    在项目根目录新建init-db文件夹,里面创建create-prod-db.sql文件,内容如下:

    CREATE DATABASE prod_db;
    GRANT ALL PRIVILEGES ON DATABASE prod_db TO postgres;
    
  2. 修改base-compose.yml
    给testdb服务添加脚本目录挂载:

    version: '3.3'
    
    networks:
      shared_network:
       driver: bridge
    
    services:
      testdb:
        image: postgres:latest
        volumes:
          - postgres_data:/var/lib/postgresql/data
          - ./init-db:/docker-entrypoint-initdb.d  # 新增挂载初始化脚本
        environment:
          - POSTGRES_DB=develop_db
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        ports:
          - "5432:5432"
        networks:
          - shared_network
    
    volumes:
      postgres_data:
    
  3. 重置现有数据卷(首次配置需要)
    因为初始化脚本仅在数据库卷首次创建时执行,需先清理旧卷:

    docker-compose down -v
    
  4. 重新启动服务
    执行原有启动命令,容器会自动创建develop_db和prod_db两个数据库。


方法二:启动两个独立的PostgreSQL服务(隔离开发/生产环境)

这种方式让开发和生产数据库完全独立,适合需要不同配置的场景:

  1. 重构base-compose.yml
    只保留网络和卷的基础配置,移除原testdb服务:

    version: '3.3'
    
    networks:
      shared_network:
       driver: bridge
    
    volumes:
      postgres_develop_data:
      postgres_prod_data:
    
  2. 修改docker-compose.yml(开发环境)
    添加专属的develop_db服务,并更新应用的依赖:

    version: '3.3'
    
    include:
      - ./base-compose.yml
    
    services:
      develop_db:
        image: postgres:latest
        volumes:
          - postgres_develop_data:/var/lib/postgresql/data
        environment:
          - POSTGRES_DB=develop_db
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        ports:
          - "5432:5432"
        networks:
          - shared_network
    
      test_develop:
        container_name: test_develop
        build: .
        command: python manage.py runserver 0.0.0.0:7000
        ports:
          - "7000:7000"
        env_file:
          - ./environments/.env.develop
        depends_on:
          - develop_db
        networks:
          - shared_network
        links:
          - develop_db
    
  3. 修改docker-compose-prod.yml(生产环境)
    添加专属的prod_db服务,注意端口避免冲突(这里用5433映射到容器内的5432):

    version: '3.3'
    
    include:
      - ./base-compose.yml
    
    services:
      prod_db:
        image: postgres:latest
        volumes:
          - postgres_prod_data:/var/lib/postgresql/data
        environment:
          - POSTGRES_DB=prod_db
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        ports:
          - "5433:5432"
        networks:
          - shared_network
    
      test_production:
        container_name: test_production
        build: .
        command: python manage.py runserver 0.0.0.0:8001
        ports:
          - "8001:8001"
        env_file:
          - ./environments/.env.prod
        depends_on:
          - prod_db
        networks:
          - shared_network
        links:
          - prod_db
    
  4. 启动两个独立项目
    使用-p指定项目名,避免服务名称冲突:

    docker-compose -f docker-compose.yml -p develop up --build -d
    docker-compose -f docker-compose-prod.yml -p prod up --build -d
    

内容的提问来源于stack exchange,提问作者spartan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:27:04