【问题标题】:How can I access the Django server using WSL (Windows Subsystem for Linux)?如何使用 WSL(Linux 的 Windows 子系统)访问 Django 服务器?
【发布时间】:2019-01-02 21:44:04
【问题描述】:

我在 Windows 10 上的 Ubuntu 上使用 Bash,并在 python 虚拟环境中安装了 django。我能够成功启动 django 服务器,但是当我在 Windows 10 浏览器中输入“http://127.0.0.1:8000/”时,我没有得到响应。

我尝试将端口号更改为其他值(例如 python3 manage.py runserver 127.0.0.1:7171),但我仍然一无所获。

我认为这不是防火墙问题,因为 WSL 和浏览器都在同一台 Windows 10 笔记本电脑上运行。你知道可能是什么问题吗?

(env) $ python3 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
July 26, 2018 - 00:50:25
Django version 2.0.7, using settings 'portfolio.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Windows 版本:Windows 10 build 1709 (16299.492)

Ubuntu 版本:Ubuntu 16.04.5 LTS

【问题讨论】:

  • 它是否可以在 Linux 上运行,例如curl 127.0.0.1:8000?

标签: python django windows-subsystem-for-linux


【解决方案1】:

不久前我自己这样做时,我发现无法将 WSL 中运行的东西绑定到 localhost。

但是,通过我的主机名连接时我确实成功了。

因此,给定主机名 GAMMAFLYER,请执行以下操作:

python3 manage.py runserver 0.0.0.0:8000

这允许外部连接。

然后在您的浏览器中:

http://GAMMAFLYER:8000

【讨论】:

  • 很奇怪,this answer 另有建议。出于好奇,当您 ping GAMMAFLYER 时会得到什么?
  • 这在某些时候是个问题,但如果他们在过去几个月内修复了它,那么我对 WSL 系统的了解似乎已经过时了。
  • 谢谢影子。我尝试使用主机名,但仍然没有得到响应。当我不使用 WSL,而只是在 windows 上使用 python 运行 django 时,它工作得很好。我想我得换回去了。我只是对 WSL 感到兴奋
  • 是的,我也很喜欢它。很遗憾它还没有出现——但它已经走到了现在,这给了我希望。
【解决方案2】:

我有同样的问题,@Shadow 的答案对我很有效,即我可以在 WSL 上的python manage.py runserver 0.0.0.0:8000 之后从 Windows 访问 http://HOSTNAME:8000

但是有一种方法可以让它正常工作,并通过为那些在 Windows 系统上安装了 VirtualBox 的人禁用 VirtualBox 网络适配器来访问 Windows 上的 http://localhost:8000

我发现我的主机名在windows上的IP地址是VirtualBox Host-Only Ethernet Adapter的IP:

(windows cmd):

ping -4 HOSTNAME

Pinging HOSTNAME [192.168.56.1] with 32 bytes of data:
Reply from 192.168.56.1: bytes=32 time<1ms TTL=128
Reply from 192.168.56.1: bytes=32 time<1ms TTL=128

ipconfig -all

Ethernet adapter VirtualBox Host-Only Network:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
   Physical Address. . . . . . . . . : ***
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::7d75:46fe:41d8:1ee3%5(Preferred)
   IPv4 Address. . . . . . . . . . . : 192.168.56.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : ***
   DHCPv6 Client DUID. . . . . . . . : ***
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

在我从 Control Panel\Network and Internet\Network Connections 禁用此适配器并在 WSL shell 上重新运行 python manage.py runserver 后,它运行良好,我可以从 Windows 访问 http://localhost:8000

【讨论】:

    【解决方案3】:

    我目前正在 Windows 10 机器上运行 wsl2。我在尝试设置 django 项目时遇到了这个问题。我可以通过在 powershell 上运行以下命令来使其工作。

    netsh interface portproxy reset
    

    我的代理端口存在一些配置错误,上述命令能够修复这些错误。因此,如果您曾经让 wsl2 工作,但现在它不工作,请运行该命令。但是,如果您刚刚安装了 wsl2,那么您需要添加代理端口才能在本地访问该端口netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

    在这种情况下,我暴露了 4000 端口。

    来源:

    【讨论】:

      【解决方案4】:

      在您的 WSL 终端上运行:

      python3 manage.py runserver 0.0.0.0:8080
      

      settings.py 中包含您的主机名作为允许的主机(计算机名)。

      在您的浏览器中运行:http://yourhostname:8080

      【讨论】:

        猜你喜欢
        • 2017-05-21
        • 2018-09-24
        • 2019-02-13
        • 1970-01-01
        • 2017-03-20
        • 2022-06-13
        • 2021-05-05
        • 2020-09-24
        • 2019-07-05
        相关资源
        最近更新 更多