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

无需Docker Compose,动态配置多域名Django与PostgreSQL Docker容器

解决方案

1. 用环境变量动态配置Django数据库连接

修改Django的settings.py,将数据库配置的关键参数改为从环境变量读取,彻底摆脱硬编码:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.getenv('DB_NAME', 'erp'),
        'USER': os.getenv('DB_USER', 'erp_user'),
        'PASSWORD': os.getenv('DB_PASSWORD', '123'),
        'HOST': os.getenv('DB_HOST', 'localhost'),
        'PORT': os.getenv('DB_PORT', '5432'),
    }
}

2. 利用Docker网桥的容器名称解析

你已经搭建了自定义Docker网桥,同网桥内的容器可以直接通过容器名称互相访问(Docker内置DNS会自动解析容器名称到对应IP)。

创建租户容器时,只需给Django容器设置DB_HOST环境变量为对应PostgreSQL容器的名称:

  • 比如创建mycomp_web时,设置环境变量DB_HOST=mycomp_db
  • 创建mycomp2_web时,设置DB_HOST=mycomp2_db

这样Django容器就能直接通过容器名称访问到对应的PostgreSQL容器,无需手动获取IP或端口。

3. 用模板化Docker Compose简化租户创建

为了批量、标准化创建租户容器,可以写一个Docker Compose模板,通过环境变量替换租户标识:

docker-compose.template.yml

version: '3.8'
services:
  web:
    image: your-django-image:latest
    environment:
      - DB_HOST=${TENANT}_db
      - DB_NAME=erp
      - DB_USER=erp_user
      - DB_PASSWORD=123
    networks:
      - your-custom-bridge
    # 其他配置:端口映射、卷挂载等
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=erp
      - POSTGRES_USER=erp_user
      - POSTGRES_PASSWORD=123
    volumes:
      - ${TENANT}_db_data:/var/lib/postgresql/data
    networks:
      - your-custom-bridge
    # 无需暴露端口给宿主机,同网桥内直接访问

volumes:
  ${TENANT}_db_data:

networks:
  your-custom-bridge:
    external: true # 使用你已创建的自定义网桥

创建租户时,只需设置TENANT环境变量即可一键启动:

# 创建mycomp租户的容器
TENANT=mycomp docker-compose -f docker-compose.template.yml up -d

# 创建mycomp2租户的容器
TENANT=mycomp2 docker-compose -f docker-compose.template.yml up -d

关键注意事项

  • 确保所有租户的web和db容器都加入同一个自定义网桥,这样容器名称解析才会生效。
  • Docker Compose会自动处理容器启动依赖(web服务会等待db服务启动),无需额外配置。
  • 生产环境中不要硬编码数据库密码,建议使用Docker Secrets或加密的.env文件传递敏感信息。

内容的提问来源于stack exchange,提问作者Evren Bingøl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:43:36