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

Docker Compose中Python脚本连接PostgreSQL遇主机名解析错误

解决psycopg2无法解析postgres主机名的问题

核心原因

你用docker run启动的advocacy-app容器默认加入Docker的默认桥接网络,而docker-compose配置中的postgres容器在自定义的mynetwork网络里,两个网络相互隔离,导致容器无法通过主机名postgres找到数据库服务。

解决方案

方法1:用docker-compose run替代docker run

直接通过docker-compose运行脚本容器,它会自动加入配置中定义的mynetwork,无需手动指定网络:

docker-compose run advocacy-app python3 app/pipeline.py

方法2:手动指定docker-compose的网络运行容器

  1. 先查看docker-compose创建的自定义网络名称:
docker network ls

通常名称格式为{当前目录名}_mynetwork,比如当前目录是advocacy-service,网络名就是advocacy-service_mynetwork。

  1. 运行容器时指定加入该网络:
docker run --network=<你的mynetwork名称> advocacy-app python3 app/pipeline.py

额外注意事项

  1. 数据库名称不匹配:你的config.yaml中指定的数据库是falcon,但docker-compose的postgres配置里POSTGRES_DB是postgres。需要二选一修改:

    • 要么修改config.yaml的database字段为postgres;
    • 要么修改docker-compose中postgres的POSTGRES_DB环境变量为falcon,让容器初始化时创建对应数据库。
  2. 数据库服务就绪延迟:depends_on仅保证postgres容器启动,但不保证数据库服务完全就绪。可以在你的Python脚本中添加数据库连接重试逻辑,避免因服务未就绪导致的连接失败。

内容的提问来源于stack exchange,提问作者Abdullah Zia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:06:00