通过Airflow访问本地Postgres容器出现连接拒绝报错如何解决
Airflow连接Postgres报错Connection refused解决方案
核心错误原因
你的Postgres容器端口映射到了宿主机的5003端口,而Airflow进程尝试访问自身网络上下文的localhost:5003,两者不属于同一个网络环境,导致连接被拒绝。
分场景解决方案
场景1:Airflow运行在Docker容器中(90%以上概率)
方案1:同网络访问(最稳定)
- 将Airflow服务和Postgres容器加入同一个Docker网络:
# 查看现有Docker网络 docker network ls # 假设Airflow默认网络为airflow_default,将Postgres容器加入该网络 docker network connect airflow_default <你的Postgres容器名/容器ID> - 修改Airflow的Postgres连接配置:
- Host填Postgres容器名
- Port填Postgres容器内部端口
5432,无需使用宿主机映射的5003 - Schema填你要连接的Postgres数据库名,默认可以填
postgres
方案2:通过宿主机IP访问
- 如果你不想调整Docker网络,将Airflow连接配置的Host修改为宿主机的局域网IP(不要填localhost/127.0.0.1),端口保持5003即可。
- Windows/macOS环境下的Docker可以直接用特殊域名
host.docker.internal代替宿主机IP。
场景2:Airflow直接部署在宿主机(非Docker)
- 先验证本地端口连通性:
# 执行以下命令,确认5003端口可访问 nc -zv localhost 5003 - 检查Postgres容器的
pg_hba.conf配置,确认允许宿主机IP的连接请求。 - 检查Airflow连接配置的Schema字段,填写正确的Postgres数据库名,不要留空,默认值为
postgres。
额外校验点
确认Airflow连接配置的用户名、密码和你启动Postgres容器时设置的POSTGRES_USER、POSTGRES_PASSWORD参数完全一致。
内容的提问来源于stack exchange,提问作者racheli s
相关产品推荐
相关产品推荐

