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

Docker部署的Airflow连接独立PostgreSQL容器报Connection refused如何解决

问题根因

你遇到的连接拒绝错误核心是Docker容器网络隔离机制导致的:

  • 你的Airflow所有服务(调度器、工作器等)都运行在独立的Docker容器中,代码里写的host='localhost'指向的是Airflow容器自身的本地环境,而不是宿主机的本地环境
  • PgAdmin是直接运行在宿主机上的,所以用localhost:5433可以正常访问到端口映射后的PostgreSQL服务,Airflow容器里没有这个端口映射,自然访问失败。

正确的连接配置方案

方案1:通过Docker容器名直接内网访问(更稳定,推荐)

同一个Docker网络下的容器可以直接通过容器名互访,不需要走宿主机端口映射:

  1. 先确认你的PostgreSQL容器test-instance和Airflow服务在同一个Docker网桥下,如果不在可以用命令加入:docker network connect <airflow所在网桥名> test-instance
  2. 修改DAG里的连接字符串:
def queryPostgresql():
        # host填PostgreSQL的容器名,端口用容器内部的5432,不需要用映射后的5433
        conn_string="dbname='postgres' host='test-instance' port='5432' user='postgres' password='admin'"
        conn=db.connect(conn_string)
        df=pd.read_sql("select name,city from public.users",conn)
        df.to_csv('postgresqldata.csv')
        print("-------Data Saved------")

如果用Airflow自带的连接管理界面配置,参数如下:

  • 连接类型:Postgres
  • Host:test-instance
  • Schema:postgres
  • Login:postgres
  • Password:admin
  • Port:5432

方案2:用宿主机IP访问

如果不想调整Docker网络配置,可以把连接字符串里的localhost换成宿主机的局域网IP,端口保持5433即可,注意宿主机防火墙要开放5433端口的内部访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:27:00