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

从运行在WSL上的django连接到运行在Windows上的Postgres,django,postgresql,windows-subsystem-for-linux,wsl-2,Django,Postgresql,Windows Subsystem For Linux,Wsl 2,我主要在windows上开发,但我正在使用WSL测试我的应用程序,因为我将把它推送到linux服务器上。我当前的问题是将运行在WSL上的django应用程序连接到运行在windows上的postgres。许多文章解释了如何连接到运行在WSL上的postgres,但不是相反。我还无法测试所有这些,因此我们可能需要调整此答案中的一些项目,但以下是我建议的步骤: 首先,假设这是一个WSL2实例,MDN应该用于从WSL访问Windows主机IP。首先,请尝试从WSL内部ping$(主机名).local

我主要在windows上开发,但我正在使用WSL测试我的应用程序,因为我将把它推送到linux服务器上。我当前的问题是将运行在WSL上的django应用程序连接到运行在windows上的postgres。许多文章解释了如何连接到运行在WSL上的postgres,但不是相反。

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

  • 首先,假设这是一个WSL2实例,MDN应该用于从WSL访问Windows主机IP。首先,请尝试从WSL内部ping$(主机名).local

  • 如果这解析了一个IP地址,那么这就是步骤1。如果没有,那么还有其他选择(请参阅)

  • 我假设由于防火墙的原因,ping不会返回。您需要一个规则来启用它。从管理员PowerShell中,
    新建NetFirewallRule-DisplayName“WSL Ping”-入站方向-InterfaceAlias“vEthernet(WSL)”-操作允许-协议ICMPv4
    。然后再次尝试ping$(主机名).local。使用
    Remove NetFirewallRule-DisplayName“WSL Ping”

  • 如果这样做行得通,那么您对如何访问PostgreSQL真的有了答案——在该接口上设置防火墙规则。它应该类似于
    新的NetFirewallRule-DisplayName“WSL PostgreSQL”-入站方向-InterfaceAlias“vEthernet(WSL)”-操作允许-协议TCP-本地端口5432

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


谢谢。这起作用了。然而,我不得不采取一些额外的步骤。我必须将django中的主机数据库IP更改为已解析的IP。我还得到了一个
django.db.utils.OperationalError:致命:没有主机“”、用户“”、数据库“”的pg_hba.conf条目,SSL关闭
。我通过将解析的IP地址添加到pg_hba.conf.Cool中解决了这个问题-很好。只是想将来参考一下——你是说mDNS名称不起作用,所以你不得不求助于IP来进行
pg_hab.conf
和Django设置吗?