从 WSL2 连接到 Windows 主机上运行的 Postgres?

从 WSL2 连接到 Windows 主机上运行的 Postgres?

我正在尝试从 WSL2 连接到安装在 Windows 计算机上的 PostgreSQL DB,但在连接时遇到问题,如果您能帮助我解决这个问题,我将不胜感激。除此之外,我已经尝试了以下选项。

  1. Windows postgreSQL 在端口上运行良好5432

  2. pg_hba.conf文件中有以下条目

    host     all            all             0.0.0.0/0                md5
    
  3. 通过以下命令检查 WSL2 的 Windows IP 地址,然后使用 Telnet 检查,仍然没有结果

     sudo cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' 
     172.19.240.1
     telnet 172.19.240.1 5432
    
  4. 5432为端口定义入站防火墙规则具有高级安全性的 Windows Defender 防火墙还是行不通

  5. 完全禁用防火墙-同样的问题:(

答案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然后选择下一个

  • 选择TCP5432输入特定端口然后输入下一个

  • 选择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

我并不是上述内容的专家,因此请随时提出更好的解决方案。

相关内容