使用PyCharm运行Docker Compose内Django时无法识别postgres服务名如何解决
问题排查与解决方案
1. 修正Postgres端口配置
你当前docker-compose.yml中postgres服务的端口映射配置错误:
ports: - "5400:5399"
官方postgres镜像默认监听5432端口,上述配置将容器侧端口错写为5399,导致postgres服务没有在预期端口运行,即便是同网络主机名解析正常也无法连接。
修改为:
ports: - "5400:5432" # 仅需要外部访问时保留,同网络内部访问可以直接删除ports配置
2. 确认PyCharm启动时依赖服务已运行
你需要在PyCharm的Django Server运行配置中,添加「启动前」任务,先执行docker compose up -d postgres redis启动依赖服务,确保django容器启动时postgres容器已经在integration网络中正常运行。
你可以手动先执行上述命令启动postgres和redis后,进入django容器执行ping postgres验证网络连通性:
- 若能正常解析,说明服务网络配置正常,问题出在PyCharm启动逻辑没有加载全部compose服务
- 若无法解析,执行
docker inspect postgres和docker inspect django确认两个容器的Networks字段均归属integration网络。
3. 补充Django数据库连接端口
你当前docker_local.py中的数据库连接串未明确指定端口,修正postgres端口后,调整连接串配置:
DATABASES = { 'default': dj_database_url.config( default='postgres://vagrant:vagrant@postgres:5432/vagrant'), } DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'
4. 校验PyCharm远程解释器配置
确认你配置的Docker Compose远程解释器关联的服务为django,并且PyCharm启动容器时默认加入compose创建的integration网络,避免单独启动django容器脱离现有compose网络导致无法解析其他服务主机名。
内容的提问来源于stack exchange,提问作者Joe Howard
相关产品推荐
相关产品推荐

