WSL中Airflow无法连接Windows本地Postgres:连接被拒绝
解决WSL Airflow连接Windows主机PostgreSQL失败问题
问题根源
WSL环境中的localhost指向Ubuntu自身的环回地址,并非Windows主机的本地地址,直接用localhost连接Windows上的PostgreSQL必然触发连接拒绝错误。
分步解决方案
1. 获取Windows主机的局域网IP
在Windows命令提示符(CMD)中执行:
ipconfig
找到以太网适配器WSL或本地连接的IPv4地址(格式如192.168.x.x),记下来备用。
2. 配置PostgreSQL允许远程连接
- 编辑PostgreSQL配置文件
postgresql.conf(Windows路径通常为C:\Program Files\PostgreSQL\<你的版本号>\data\postgresql.conf),修改以下参数:listen_addresses = '*' # 允许所有IP访问,也可指定Windows主机IP - 编辑
pg_hba.conf(同目录下),添加一行规则允许WSL网段连接:
(测试阶段可临时用host all all <WSL子网段>/24 scram-sha-2560.0.0.0/0允许所有IP连接,生产环境需限制网段) - 重启Windows上的PostgreSQL服务:打开「服务」面板,找到
PostgreSQL <版本号>,右键选择「重启」。
3. 配置Airflow连接参数
方式一:修改airflow.cfg文件
找到WSL中的airflow.cfg(通常在~/airflow/目录下),修改sql_alchemy_conn参数:
sql_alchemy_conn = postgresql+psycopg2://<Postgres用户名>:<密码>@<Windows主机IP>:5432/carPrices
保存后执行初始化命令:
airflow db init
方式二:Airflow UI配置连接
- 登录Airflow WebUI(localhost:8081),进入「Admin」→「Connections」→「+」新建连接
- 配置项:
- Conn Id:自定义(如
postgres_carprices) - Conn Type:选择
Postgres - Host:填入Windows主机的局域网IP
- Schema:
carPrices - Login:PostgreSQL用户名
- Password:PostgreSQL密码
- Port:
5432
- Conn Id:自定义(如
- 点击「Test Connection」验证连接。
4. 额外检查项
- 确保Windows防火墙允许PostgreSQL的5432端口入站,或临时关闭防火墙测试连通性
- 在WSL中执行
ping <Windows主机IP>,确认网络连通 - 验证PostgreSQL用户具备远程连接权限,可先用超级用户(如
postgres)测试连接
内容的提问来源于stack exchange,提问作者ABUBAKAR MUHAMMED MUKTAR
相关产品推荐
相关产品推荐

