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

Docker部署Django项目:自定义网络连接本地PostgreSQL问题

解决Docker容器通过自定义网络连接本地PostgreSQL的问题

要通过自定义网络让Docker容器连接本地PostgreSQL,需要从PostgreSQL配置、Docker Compose设置、Django数据库配置三个方面调整:

1. 修改PostgreSQL监听与访问权限

PostgreSQL默认仅监听localhost,需调整配置允许Docker容器所在网络访问:

  • 编辑postgresql.conf(路径通常为/etc/postgresql/{版本号}/main/postgresql.conf),将listen_addresses改为'0.0.0.0'(生产环境建议指定具体Docker网关IP,避免全开放),保存后退出。
  • 编辑同目录下的pg_hba.conf,添加一行允许Docker自定义网络IP段的访问规则:
    host    all             all             172.18.0.0/16        scram-sha-256
    
    (可通过docker network inspect backend查看自定义网络的实际网段,替换上述IP段)
  • 重启PostgreSQL服务使配置生效:
    sudo systemctl restart postgresql
    

2. 优化Docker Compose配置

无需硬编码宿主机IP,Docker提供跨平台通用的宿主机域名host.docker.internal,同时确保Django服务绑定容器内所有IP:

version: '3.3'

services:
  web:
    restart: always
    container_name: main
    command:
      - /bin/bash
      - -c
      - |
        python manage.py makemigrations accounts
        python manage.py migrate
        python manage.py runserver 0.0.0.0:8000  # 绑定0.0.0.0允许外部访问
    image: main
    build: .
    volumes:
      - .:/main
    ports:
      - "8000:8000"
    networks:
      - backend
networks:
  backend:
volumes:
  static:

3. 调整Django数据库配置

在项目的settings.py中更新数据库连接的HOST为host.docker.internal:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '你的数据库名',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': 'host.docker.internal',
        'PORT': '5432',
    }
}

若坚持使用原配置中的extra_hosts(dbhost:172.17.0.1),只需确保PostgreSQL的pg_hba.conf允许172.17.0.1访问,同时将DATABASES的HOST设为dbhost即可。

内容的提问来源于stack exchange,提问作者Hom Prasad Dhakal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:55:29