V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX  ›  Windows

WSL2 启动了一个 localhost:8000 服务, chrome 总是打不开,查了无数文档,知道是网络设置的原因,不知道怎么 fix,有人遇到类似的问题吗?

  •  
  •   ericgui · 2020-12-29 13:20:57 +08:00 · 5873 次点击
    这是一个创建于 1409 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个 wsl2 的网络可真的是太烦了

    看来还是没法替代 macOS

    37 条回复    2020-12-30 13:09:19 +08:00
    6IbA2bj5ip3tK49j
        1
    6IbA2bj5ip3tK49j  
       2020-12-29 13:23:18 +08:00
    dobelee
        2
    dobelee  
       2020-12-29 13:29:51 +08:00 via iPhone   ❤️ 2
    最简单的,切换回 wsl1 解君愁。
    ai277014717
        3
    ai277014717  
       2020-12-29 13:32:50 +08:00
    nat 转换
    CallMeReznov
        4
    CallMeReznov  
       2020-12-29 13:32:53 +08:00
    你绑 eth0 然后自己的机器无法访问?
    防火墙吧。。。。?
    iamwho
        5
    iamwho  
       2020-12-29 13:36:41 +08:00
    ericgui
        6
    ericgui  
    OP
       2020-12-29 13:36:45 +08:00
    @ai277014717 咋做?求指教
    ericgui
        7
    ericgui  
    OP
       2020-12-29 13:39:20 +08:00
    @iamwho 我用这个解决了:


    The IP i use in my .bashrc is from:

    export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0

    我也不知道什么原因

    我的网络知识很少,一直都没咋学明白
    ai277014717
        8
    ai277014717  
       2020-12-29 13:40:09 +08:00
    @ericgui 关键字搜一下就知道了 wsl2 hyper-v nat
    enfuss
        9
    enfuss  
       2020-12-29 13:57:03 +08:00
    @ericgui #7
    因为 wsl2 每次启动的 localhost 和 windows 本身的 localhost 不是同一个东西。之前试图给 wsl2 用 windows 的代理就碰到这个坑。
    purefkh
        11
    purefkh  
       2020-12-29 14:30:33 +08:00 via Android
    zhlssg
        12
    zhlssg  
       2020-12-29 14:37:16 +08:00   ❤️ 28
    确实有点坑,有天搞这个加班了一小时,下班发现电动车被偷了
    ohoh
        13
    ohoh  
       2020-12-29 14:53:00 +08:00
    打开老版 IE, 进入设置进行重置, 可能需要重启电脑.
    zlowly
        14
    zlowly  
       2020-12-29 15:13:51 +08:00
    最新版本的 WIN10 里的 WSL2 里监听于::1 的话,WIN10 的 HOST 主机里就可以用 localhost 访问到对应监听的端口,看起来似乎是通过 ipv6 实现的。
    xgc
        15
    xgc  
       2020-12-29 15:42:01 +08:00
    是不是开了 SS 或者什么别的 http 代理,正常是可以用 localhost:8000 访问的
    sleepm
        16
    sleepm  
       2020-12-29 15:48:11 +08:00
    https://abdus.dev/posts/fixing-wsl2-localhost-access-issue/
    写个 powershell 脚本
    在事件查看器找到'加载 wsl 交换机(1019)'的事件,加个计划任务上去,每次 wsl2 启动时自动把 wls2 的 ip 写入主机 hosts
    shayne/go-wsl2-host 这个我试了,我的 win10 没用,不工作,所以只能搞脚本了
    wsl2 除了不能固定 ip/nat 之外,还是很香的
    hui314
        17
    hui314  
       2020-12-29 16:00:34 +08:00
    wsl2 除了 localhost,还有文件 io 巨缓慢的问题,TTL 能去到 5 秒.已经转投 virtualBox
    Rhilip
        18
    Rhilip  
       2020-12-29 16:38:06 +08:00
    我是绑定静态 IP, 个人觉得这是比 localhost 更好的方法访问 WSL2
    https://github.com/MicrosoftDocs/WSL/issues/418#issuecomment-648570865
    nmap
        19
    nmap  
       2020-12-29 17:29:21 +08:00
    最简单的办法是不要用 localhost,用 wsl2 eth 口的 ip 访问
    KuroNekoFan
        20
    KuroNekoFan  
       2020-12-29 17:35:00 +08:00 via iPhone   ❤️ 1
    @hui314 wsl2 访问 mnt 路径会有问题,用虚拟机本身的硬盘空间就正常了
    keepeye
        21
    keepeye  
       2020-12-29 17:36:33 +08:00
    没有 docker 需求的话还是用 wsl1 比较好,尤其是需要读写宿主机文件的的话
    libook
        22
    libook  
       2020-12-29 17:52:27 +08:00   ❤️ 1
    WSL2 是跑在虚拟机里的,虚拟机和 Win10 是相当于 2 台网络设备,所以你在 WSL2 里启动了一个服务,不能监听 localhost,而是应该监听 2 台设备同在的网络段,最简单直接的是监听 0.0.0.0:8000 。

    然后找到 WSL2 目前在用的 IP 地址,比如 10.2.3.1,然后在 Win10 上访问 10.2.3.1:8000 就可以了,就像是你在自己电脑上访问一台测试服务器上的服务一样。
    assiadamo
        23
    assiadamo  
       2020-12-29 18:05:05 +08:00
    既然用到 WSL2 了,不如连 docker desktop 一起安排上吧
    fuis
        24
    fuis  
       2020-12-29 18:07:20 +08:00
    多大点事

    export HOST_IP="$(grep nameserver /etc/resolv.conf | awk '{print $2}')"
    export WSL_IP="$(hostname -I)"
    hantsy
        25
    hantsy  
       2020-12-29 18:46:49 +08:00
    @hui314 Windows 下真是麻烦,本来我是 Virtualbox 用得多。

    后来的 Docker 放弃了 Dockers Toolbox (支持 Virtulbox ),与 MS 合作开发 Docker For Windows,仅支持 Hyper V,无耐才用它。最扯蛋的是 VirtualBox 与 HyperV 不兼容,虽然 VirtualBox 有选项可以用 HyperV 协议,一直没成功过。
    hantsy
        26
    hantsy  
       2020-12-29 18:49:44 +08:00
    对于开发人员,Vargrant 是比较好的方案,直接用虚拟机,而且网络,文件系统映射做得不错。
    uselessVisitor
        27
    uselessVisitor  
       2020-12-29 19:03:22 +08:00 via Android
    直接用 wsl2 ifconfig 出来的内网 ip 访问
    narmgalaxy
        28
    narmgalaxy  
       2020-12-29 19:46:56 +08:00
    我记得是因为 wsl2 是虚拟机,占用了一部分端口
    https://www.cnblogs.com/zsmumu/p/13389816.html
    kennylam777
        29
    kennylam777  
       2020-12-29 19:52:18 +08:00 via Android
    @hantsy WSL2 不好嗎,Docker for Desktop 3.0.0 以 WSL2 為主,輕鬆解決 File system 的問題。

    WSL 1 能直接使用 Windows 網口,用來調試 userspace 程序也很輕鬆
    hantsy
        30
    hantsy  
       2020-12-29 21:31:12 +08:00
    @kennylam777 Hyper V 的生态不如 VirtualBox,很多东西不支持 HyperV,比如 Genymotion,Vagrant 很多 Box 只有 VirtualBox 版本。
    jiangzm
        31
    jiangzm  
       2020-12-29 21:33:45 +08:00
    监听改成 0.0.0.0:80 试下
    kennylam777
        32
    kennylam777  
       2020-12-29 22:40:47 +08:00
    @hantsy 的確, Vagrant 的 Hyper-V driver 不能用要 VirtualBox 也沒辦法, 但新的 Hyper-V 可以和 VirtualBox 共存了, 不像以前般 mutually exclusive
    RickyC
        33
    RickyC  
       2020-12-30 09:01:06 +08:00
    应该要让 windows 映射 WSL2 的端口, 才可在 windows 下访问
    并且 WSL2 的内网 IP 会经常自己改变

    可参考 https://blog.class4ever.com/2588.html
    ericgui
        34
    ericgui  
    OP
       2020-12-30 09:23:11 +08:00
    @RickyC +1
    RickyC
        35
    RickyC  
       2020-12-30 09:55:54 +08:00
    不映射端口的话,
    可以尝试在 WSL2 输入 ifconfig, 找到 inet 的 IP,
    然后用 该 IP:端口, 看能不能访问.
    hantsy
        36
    hantsy  
       2020-12-30 11:25:02 +08:00
    如果直接映射 WLS 所有端口到 Windows,估计太多冲突。 没有简单的通过子域名方式来解决所有 的 WLS 端口问题。比如 Windows 启动时在 Host 文件,写入 wsl.local XXXX ( WLS IP ).
    xzysaber
        37
    xzysaber  
       2020-12-30 13:09:19 +08:00
    重启 WSL 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1083 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:32 · PVG 06:32 · LAX 14:32 · JFK 17:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.