从 WSL 上运行的 django 连接到 Windows 上运行的 Postgres

Tim*_*ver 2 django postgresql windows-subsystem-for-linux wsl-2

我主要在 Windows 上进行开发,但我正在使用 WSL 测试我的应用程序,因为我会将其推送到 Linux 服务器。我当前的问题是将在 WSL 上运行的 django 应用程序连接到在 Windows 上运行的 postgres。许多文章解释了如何连接到在 WSL 上运行的 postgres,但反之则不然。

Not*_*1ds 8

我无法测试所有这些,因此我们可能需要调整此答案中的一些项目,但以下是我建议的步骤:

  • 首先,假设这是一个 WSL2 实例,mDNS 应该可以从 WSL 访问 Windows 主机 IP。ping $(hostname).local首先尝试从 WSL 内部尝试。

  • 如果这可以解析 IP 地址,那么就是步骤 1。如果不能,则还有其他选择(请参阅此答案)。

  • 我假设由于防火墙的原因 ping 不会返回。您需要一条规则来启用它。从管理员 PowerShell New-NetFirewallRule -DisplayName "WSL Ping" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow -Protocol ICMPv4,. 然后再试ping $(hostname).local一次。删除规则Remove-NetFirewallRule -DisplayName "WSL Ping"

  • 如果有效,那么您就真正找到了如何访问 PostgreSQL 的答案——在该接口上设置防火墙规则。它应该是类似的东西New-NetFirewallRule -DisplayName "WSL PostgreSQL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow -Protocol TCP -LocalPort 5432

  • 然后您应该能够使用 {computername}.local 地址从 WSL 中的 Django 应用程序访问它。

  • 谢谢。这有效。但是,我必须采取一些额外的步骤。我必须将 django 中的主机数据库 IP 更改为已解析的 IP。我还得到了`django.db.utils.OperationalError: FATAL: no pg_hba.conf Entry for host "<ip address>", user "<user>", database "<database name>", SSL off`。我通过将解析的 IP 地址添加到 pg_hba.conf 解决了这个问题。 (2认同)