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

Azure VM中Django应用无法连接PostgreSQL数据库求助

解决Docker容器中Django连接Azure VM PostgreSQL的问题

1. 修正Django数据库配置的主机地址

容器内的127.0.0.1指向容器自身,并非Azure VM主机。你需要修改Django settings.py里的数据库HOST配置:

  • 若容器和VM在同一内网环境,填写VM的内网私有IP
  • 若需远程连接,填写VM的公网IP(生产环境优先用内网连接)

示例配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '你的数据库名',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': '10.0.0.4',  # 替换为VM的内网/公网IP
        'PORT': '5432',
    }
}

2. 配置PostgreSQL监听VM的IP地址

登录Azure VM,找到PostgreSQL配置文件(通常路径为/etc/postgresql/<版本号>/main/postgresql.conf):

  • 找到listen_addresses项,修改为'*'(允许监听所有IP)或指定VM的内网/公网IP
listen_addresses = '*'

修改后重启PostgreSQL服务:

sudo systemctl restart postgresql

3. 允许PostgreSQL接受容器的连接请求

修改同目录下的pg_hba.conf文件,添加容器所在网段的连接规则:

host    你的数据库名   数据库用户名   172.17.0.0/16    scram-sha-256  # Docker默认桥接网段
host    你的数据库名   数据库用户名   10.0.0.0/24      scram-sha-256  # VM内网网段

修改后重启PostgreSQL服务生效。

4. 开放Azure VM的5432端口

  • 在Azure门户进入VM的网络 -> 入站端口规则,添加允许5432端口的规则,来源设置为容器所在子网或指定IP
  • 检查VM内部防火墙(如ufw),确保开放5432端口:
sudo ufw allow 5432/tcp
sudo ufw reload

5. 验证PostgreSQL监听状态

执行netstat -an | grep 5432,正常应看到tcp 0 0 0.0.0.0:5432 0.0.0.0:*(监听所有IP)或对应VM IP的监听记录,而非仅监听127.0.0.1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:49:56