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

使用Docker Compose部署Airflow连接Postgres容器时遇连接拒绝错误

Airflow容器连接Postgres容器失败的解决方法

问题核心原因

你遇到的psycopg2.OperationalError: Connection refused本质是容器网络中localhost的概念混淆:

  • Postgres容器内的localhost指向容器自身,所以手动进入容器能正常连接Postgres服务;
  • 但Airflow容器内的localhost仅指向Airflow容器本身,而非Postgres容器,因此连接localhost:5432会被拒绝。

从容器状态来看,Postgres容器仅在Docker内部网络暴露5432端口(5432/tcp),这不是问题——Airflow和Postgres在同一Docker网络下,不需要宿主机端口映射,直接通过容器服务名即可访问。

解决步骤

1. 修改Airflow的Postgres连接配置

将Airflow中Postgres连接的host字段从localhost替换为Postgres容器的服务名(或容器名):

  • 你的Postgres容器名为postgres-1,对应Docker Compose中的服务名通常是postgres,因此主机地址填写postgres即可;
  • 示例连接字符串修改:
    # 原错误配置
    postgresql://airflow:airflow@localhost:5432/airflow
    
    # 修改后正确配置
    postgresql://airflow:airflow@postgres:5432/airflow
    
    你可以在Airflow UI的「Admin > Connections」中修改对应连接的Host值,或检查DAG代码、环境变量中的连接配置。

2. 验证网络连通性

进入任意Airflow容器(如webserver),测试与Postgres容器的连通性:

# 测试ping连通性
docker exec -it airflow-webserver-1 ping postgres

# 直接用psql测试连接
docker exec -it airflow-webserver-1 psql -h postgres -U airflow -p 5432

若能成功连接,说明配置修改正确。

额外检查(可选)

确保Docker Compose中Airflow和Postgres服务处于同一网络下(默认情况下,Docker Compose会为所有服务创建默认网络,无需额外配置)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:58:16