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

Docker Compose同网络下应用容器无法连接PostgreSQL数据库容器问题求助

Docker Compose 应用容器无法解析PostgreSQL服务名问题解决方案

你的报错核心是容器网络域名解析失败,结合给出的配置,有以下几处错误,逐一修复即可:


错误点1:PostgreSQL服务配置冲突

你在data服务中同时配置了image: postgres和build: ./data,Docker Compose会优先使用./data目录构建的镜像,而非官方PostgreSQL镜像。如果你的自定义PostgreSQL镜像存在启动错误、未正确启动数据库进程等问题,会直接导致data服务启动失败,自然无法解析data主机名。

  • 修复方案:如果不需要自定义PostgreSQL镜像,直接删除build: ./data配置行即可。如果需要自定义镜像,先单独构建测试该镜像能否正常启动PostgreSQL服务。

错误点2:卷挂载配置无效

你的src和data服务的volumes配置仅填写了宿主机路径,缺少容器内挂载路径,不符合Docker卷挂载的宿主机路径:容器内路径格式。无效的卷挂载会导致PostgreSQL启动失败(默认需要将数据持久化到/var/lib/postgresql/data路径)。

  • 修复方案:调整卷挂载配置,示例如下:
# src服务的volumes调整为和代码中的路径匹配
volumes:
  - /home/user/project/src:/workspace/src
# data服务的volumes调整为PostgreSQL默认数据路径
volumes:
  - /home/user/project/data:/var/lib/postgresql/data

错误点3:环境变量命名冲突

你使用的USER是Linux系统默认保留的环境变量,会被容器内的系统默认值覆盖,你代码中读取到的USER实际是容器内的运行用户(默认是root),而非你配置的user_name,后续即使网络通了也会鉴权失败。

  • 修复方案:
  1. 修改src服务的environment配置,将USER=user_name改为DB_USER=user_name
  2. 修改Python代码中的get_db_config函数,将user: os.environ["USER"]改为user: os.environ["DB_USER"]

错误点4:冗余配置干扰(可选优化)

自定义桥接网络下,Docker Compose默认会自动将同网络下的服务名作为域名解析,你配置的links属于废弃特性可以直接删除,避免冗余配置干扰。


验证步骤

  1. 执行docker compose down -v清理旧的容器、网络和匿名卷
  2. 执行docker compose up --build重新构建启动服务
  3. 若仍报错,进入src容器执行以下命令排查:
    • ping data:验证网络是否通,能ping通则域名解析正常
    • env | grep -E "POSTGRES_HOST|DB_USER":验证环境变量是否正确加载

内容的提问来源于stack exchange,提问作者Amalrick Menhel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 00:36:04