![从 WSL2 连接到 Windows 主机上运行的 Postgres?](https://linux22.com/image/766995/%E4%BB%8E%20WSL2%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20Windows%20%E4%B8%BB%E6%9C%BA%E4%B8%8A%E8%BF%90%E8%A1%8C%E7%9A%84%20Postgres%EF%BC%9F.png)
我正在尝试从 WSL2 连接到安装在 Windows 计算机上的 PostgreSQL DB,但在连接时遇到问题,如果您能帮助我解决这个问题,我将不胜感激。除此之外,我已经尝试了以下选项。
Windows postgreSQL 在端口上运行良好
5432
pg_hba.conf
文件中有以下条目host all all 0.0.0.0/0 md5
通过以下命令检查 WSL2 的 Windows IP 地址,然后使用 Telnet 检查,仍然没有结果
sudo cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' 172.19.240.1 telnet 172.19.240.1 5432
5432
为端口定义入站防火墙规则具有高级安全性的 Windows Defender 防火墙还是行不通完全禁用防火墙-同样的问题:(
答案1
我必须执行以下操作才能使其在我的环境中运行(Windows 11,WSL2-Debian)。
在 Linux 文件系统上:
- 打开或创建文件
~/.bash_profile
- 添加此行:
export WINDOWS_HOST=$(cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2)
这将获取 Windows 主机 IP 地址并在启动时将其设置为发行版的环境变量。
- 重新启动发行版:
wsl --shutdown
从 Windows cmd 终端wsl
重新启动它。您可以env
在 WSL2 终端中输入以确保环境变量存在。
在 Windows 端:
1 - 在 Windows 防火墙中,添加入站规则为了TCP 港口 5432(暴露的 postgresQL 端口),请按照以下步骤操作:
在cmd终端中输入
wf.msc
打开防火墙选择
Inboud rules
Port
然后选择下一个选择
TCP
并5432
输入特定端口然后输入下一个选择
Autorize connection
并执行最后 2 步
2 - 允许来自 postgresQL 配置的传入连接:
pg_hba.conf
默认打开此处的文件C:\Program Files\PostgreSQL\12\data\pg_hba.conf
- 将 IPv4 本地连接下的行替换为以下内容:
host all all 0.0.0.0/0 md5
现在每个 IP 地址都可以访问您的 pg 服务器,这是必要的,因为您的 WSL 发行版的 IP 地址在每次启动时都会发生变化。请考虑可能带来的不利影响。
此时,你应该能够从 WSL2 Linux 发行版中的任何位置访问在 Windows 上运行的 PostgresQL 服务器,使用WINDOWS_主机变量为主持人数据库。例如,在您的 javascript 代码中,您可以通过 来访问它process.env.WINDOWS_HOST
。
我并不是上述内容的专家,因此请随时提出更好的解决方案。