Docker环境下Django无法连接PostgreSQL数据库问题求助
Docker环境下Django无法连接PostgreSQL的解决方案
问题分析
错误提示connection failed: could not receive data from server: No route to host的核心原因有两点:
- 使用容器固定IP作为数据库主机,Docker容器IP可能随重启变化,且跨网络场景下无法访问
- Django容器(skiller)未加入PostgreSQL所在的
skillernet网络,导致两者不在同一网络环境,无法互通
具体修复步骤
1. 修改.env文件的数据库主机配置
将.env里的POSTGRES_HOST从固定IP替换为PostgreSQL服务名postgres(Docker Compose同一网络内可通过服务名直接解析):
POSTGRES_DB=ibm_skiller POSTGRES_PASSWORD=mYP@sSw0rd POSTGRES_USER=ibm_skiller POSTGRES_HOST=postgres # 替换原172.19.0.2 POSTGRES_PORT=5432
2. 让Django容器加入同一网络
在docker-compose.yml中给skiller服务添加networks配置,使其加入skillernet网络:
skiller: # 保留原有其他配置... networks: - skillernet
3. 重启容器生效
执行命令重启所有服务,让新配置生效:
docker-compose down docker-compose up -d
额外验证步骤
如果重启后仍有问题,可进入Django容器测试网络连通性:
docker exec -it skiller ping postgres
若能正常ping通,说明网络无问题,再检查Django是否正确加载了.env中的数据库配置变量。
内容的提问来源于stack exchange,提问作者Pink
相关产品推荐
相关产品推荐

