我的 Windows 机器上运行了 Postgres,我需要从 WSL2 内部连接到它。
- postgres windows 服务正在运行
- 我可以使用从 Windows 命令行连接到它
psql
- WSL2 vm 的 IP 是
172.31.210.120
, 网络掩码255.255.240.0
(使用 确定ipfconfig
)。 - vm内部的windows主机的IP是
172.31.208.1
(使用确定cat /etc/resolv.conf
) - 我可以使用
curl http://172.31.208.1:8080
. 如果我记录传入请求的 IP,我会得到172.31.210.120
这样的信息,这会验证两个 IP 是否正确。 - 我将以下行添加到
pg_hba.conf
:host all all 172.31.210.120/20 scram-sha-256
- 我重新启动了 postgres windows 服务
如果我尝试使用以下命令从 WSL 连接到它:
$ psql --host=172.31.208.1 --port=5432 --user=postgres
我收到此错误:
psql: error: could not connect to server: could not connect to server: Connection timed out
Is the server running on host "172.31.208.1" and accepting
TCP/IP connections on port 5432?
注意:我也尝试使用测试连接,telnet
但它也失败了。
下面的日志c:\Program Files\PostgreSQL\13\data\log\
没有显示任何错误或任何迹象表明存在连接尝试。
我在这里想念什么?
如果有人遇到同样的问题,我是这样解决的:
我需要添加一个 Windows 防火墙规则:
如果您在我最初的问题中执行其他所有操作(获取两个 IP,将 VM IP 添加到
pg_hba.conf
),那么从 WSL2 命令行连接到主机 IP 将起作用。显然我不知道你的网络的来龙去脉,所以它们可能是相同的 IP 地址,但是如果你
ipconfig
在 cmd 中运行并从那里获取你的 Windows 机器的内部 IP 地址?WSL 应该能够在该 IP 上进行通信,就好像它是您网络上的任何其他设备一样,因此将该IP 地址放入您的 psql 配置中。