非容器化Django无法连接Docker内运行的PostgreSQL数据库问题
核心原因
你的Django应用直接运行在宿主机本地,并未加入Docker Compose创建的专属内部网络,而db是Docker Compose为PostgreSQL容器分配的内部服务域名,仅能在该Compose项目同网络内的容器之间解析使用,宿主机本地运行的程序无法识别该域名。
你可以用DBeaver正常连接,是因为DBeaver配置的数据库地址是127.0.0.1/localhost,走的是docker-compose映射到宿主机的5432端口。
解决步骤
- 修改Django项目的环境变量配置文件(通常为项目根目录下的
.env文件),将DB_HOST的取值从db修改为127.0.0.1,DB_PORT保持5432即可,数据库名称、用户名、密码和docker-compose.yml中配置的保持一致。 - 若你的宿主机本地原本就运行了PostgreSQL服务占用了5432端口,可以修改
docker-compose.yml中db服务的端口映射规则为5433:5432,再将Django环境变量中的DB_PORT改为5433即可。 - 修改完成后可先在宿主机命令行执行以下命令验证连通性:
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres
输入密码postgres可以正常登录的情况下,再启动Django应用即可正常连接数据库。
内容的提问来源于stack exchange,提问作者Alexander P
相关产品推荐
相关产品推荐

