WSL(Ubuntu)中FastAPI连接Windows PostgreSQL遭拒问题求助
WSL连接Windows PostgreSQL 连接拒绝问题排查建议
核心误区先明确
WSL中的localhost指向的是WSL自身的环回地址,而非Windows主机,这是导致连接失败的高频原因,优先从以下步骤排查:
1. 替换连接的Host地址
- 不要用
localhost,改用Windows主机的局域网IP地址(比如192.168.x.x,可在Windows命令行通过ipconfig查看以太网适配器的IPv4地址),或者WSL 2支持的特殊地址host.docker.internal。 - 修改代码中的host参数:
conn = psycopg2.connect(host='192.168.xx.xx', database='fastapi', password='xxxx', cursor_factory=RealDictCursor)
2. 验证PostgreSQL监听配置
- 打开
postgresql.conf(通常在PostgreSQL安装目录/data/下),确认listen_addresses设置为*或包含Windows主机IP,而非仅localhost:listen_addresses = '*' - 重启Windows服务中的
postgresql-x64-xx服务使配置生效
3. 检查pg_hba.conf访问规则
- 打开
pg_hba.conf,添加允许WSL子网访问的规则(WSL 2子网通常为172.16.0.0/12,可在WSL中执行ip addr查看eth0的IP确认):host all all 172.16.0.0/12 scram-sha-256 - 重启PostgreSQL服务
4. 端口连通性测试
- 在WSL终端执行
nc -zv 你的WindowsIP 5432或telnet 你的WindowsIP 5432,测试端口是否可连通:- 若不通,确认Windows防火墙已开放5432端口(需允许私有网络访问,覆盖WSL子网)
- 可临时关闭防火墙验证,排除防火墙干扰
5. 确认PostgreSQL服务状态
- 在Windows命令行执行
pg_ctl status -D "你的PostgreSQL数据目录",或在服务列表中确认postgresql-x64-xx服务处于启动状态
6. WSL版本适配
- 执行
wsl --list --verbose查看WSL版本:- WSL 1可直接使用
localhost,若仍失败需检查其他配置 - WSL 2必须使用Windows主机IP或
host.docker.internal
- WSL 1可直接使用
内容的提问来源于stack exchange,提问作者user050679
相关产品推荐
相关产品推荐

