我拿到err_connection_refused
当尝试从 Windows 访问在 wsl2 (http://localhost:8000) 上运行的 django 时,但是当我使用curl http://localhost:8000
从 Windows 终端 bash 来看,它工作正常。我尝试为端口 8000 添加新的防火墙入站规则,但仍然不起作用。还有什么需要我照顾的吗?
多谢
看来是转发问题。 WSL2 的接口是 NAT 的,而 WSL1 默认情况下是桥接的。 WSL 似乎对端口进行了一些“自动转发”,但仅限于本地主机。然而,有时这种自动转发机制似乎会“崩溃”。罪魁祸首似乎是休眠或 Windows 快速启动(两者都是密切相关的功能)。
-
如果您执行以下操作,问题是否会解决wsl --shutdown
然后重新启动 WSL2 会话?如果是这样,请尝试禁用 Windows 的快速启动 https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html。由于系统上的不同(非 WSL 问题),我已经禁用了快速启动,因此这可能与我的原因有关not能够重现。
-
同样,您是否会休眠而不是关闭电源?在这种情况下,一个wsl --shutdown
也可能会解决。
对于未来的读者,请注意,对于大多数在评论中投票和回复的人来说,上述两点似乎解决了问题。但是,如果这对您不起作用,以下是我最初的“附加建议”:
-
有关一些其他想法,请参阅这个 github 问题 https://github.com/microsoft/WSL/issues/4636。对于可能需要的服务有一些建议。 (附带问题 - 您运行的是 Windows 家庭版还是专业版?)
-
您的 Windows 主机文件(例如c:\windows\system32\drivers\etc\hosts
)将 localhost 指向 127.0.0.1 以外的 IP?如果我尝试通过本地 Windows IP 地址(而不是 127.0.0.1 或 localhost)进行访问,我也会收到 ERR_CONNECTION_REFUSED 错误。
-
既然您正在查看防火墙规则,也许查看转发规则而不仅仅是入站允许?
-
如果所有其他方法均失败,请尝试导出/备份 WSL2 会话(请参阅wsl --export
),然后将其作为新的 WSL1 会话导入。看看那里是否有效。
在我的 WSL2/Ubuntu 20.04 系统上,我尝试通过以下步骤进行重现(但尚未能够):
mkdir -p ~/src/dj-test
cd ~/src/dj-test
python3 -m venv dj
source dj/bin/activate
pip install Django
django-admin startproject config .
python manage.py runserver
(虽然我用过activate.fish
因为我正在运行鱼壳)
从 Windows 中的 Vivaldi Web 浏览器访问localhost:8000
,返回“安装成功!恭喜!...”
curl
在 Powershell Core 下也能正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)