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
相关产品推荐
相关产品推荐

