跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Windows10 本地只能通过 localhost 访问 WSL2 容器?
未分類
12 5 月 2020

Windows10 本地只能通过 localhost 访问 WSL2 容器?

Windows10 本地只能通过 localhost 访问 WSL2 容器?

資深大佬 : cai314494687 4

这两天搭建了 WSL2 环境,在里面安装好了 docker 和 laradock,localhost 可以成功访问,但是配置的 nginx sites 之后使用域名方式访问 WSL2 容器,一直没成功,提示 ERR_CONNECTION_REFUSED,查了半天资料也没看到解决方案,是我姿势不对还是本身就不支持这种方式?
大佬有話說 (34)

  • 資深大佬 : laogui

    上次用了 2 发现不能用 IP 访问,还是继续用 1 了,懒得折腾了。

  • 主 資深大佬 : cai314494687

    @laogui https://github.com/microsoft/WSL/issues/4210 刚才通过这个成功解决了问题

  • 資深大佬 : forrestshuang

    我写了一个脚本可以。 通过 访问 wsl.ip 在 windows10 和 wsl2 相互访问。
    wsl 里可以通过 wsl.ip 访问 windows 的端口,windows 里面浏览器也可以通过 wsl.ip 访问 wsl2 里面的端口

    https://gist.github.com/Double1996/6a2178313b44c6bbdc90f0b9f881981a

  • 資深大佬 : noe132

    wsl2 的端口转发只有本地有效。

  • 主 資深大佬 : cai314494687

    @forrestshuang 请问你这个要用管理员权限的终端执行吗?

  • 資深大佬 : Yourshell

    docker 容器端口映射有时侯会不成功但是没有任何提示。

  • 資深大佬 : iccfish

    是的。WSL2 的容器端口在宿主访问只有两种方式,一种是`localhost`,是且只能是`localhost`,不能妄图用解析后的`127.0.0.1`或`::1`来取而代之;第二种是用 WSL2 机器的自己私有 IP 。

    加上 WSL2 资源消耗大、启动慢(虽然也只有几秒钟,但是比 WSL1 慢多了),所以不是必须用 WSL2 (比如 Docker )的场合,我都选择用 WSL1 。我的默认实例也是 WSL1 。

  • 主 資深大佬 : cai314494687

    @iccfish 我没用过 WSL1,顺便请教一下,相比 WSL1,WSL2 有什么优势吗?

  • 資深大佬 : jim9606

    @cai314494687
    WSL2 是调整过的虚拟机,用 hyper-V 运行,所以宿主和 wsl2 的通信是通过一个内部 hyper-v vswitch 进行的,host 和 wsl2 会有不同的 IP ;而且开了之后跟部分虚拟机软件冲突。但因为跑的是真正的 linux 内核,所以大部分内核功能都能用(最典型的就是 docker 所依赖的 cgroup )。
    因为我用 wsl 是为了那些 shell 实用工具或者跑些小程序编译,不追求 IO 性能,所以我用 wsl1 。

  • 資深大佬 : sola97

    有没有人遇在暴露 UDP 端口的时候,Docker 内外端口不一致导致 UDP 转发失败,在搞 ss 客户端的时候发现的

  • 資深大佬 : levelworm

    @forrestshuang 求问怎么在编辑器里头输入代码块?多谢

  • 資深大佬 : linxl

    要咋知道自己使用的 wsl 是 1 还是 2 ?

  • 資深大佬 : forrestshuang

    @cai314494687 当然啊,你要改 host

  • 資深大佬 : forrestshuang

    @linxl wsl -l

  • 主 資深大佬 : cai314494687

    @forrestshuang #13 我知道要改 host,我只是不知道的是 WSL2 不是静态 IP,而是动态 IP

  • 主 資深大佬 : cai314494687

    @linxl #12 wsl -l -v

  • 主 資深大佬 : cai314494687

    @forrestshuang #13 抱歉,刚才那个回复,没看上下文,请忽略。

  • 資深大佬 : qiyuey

    hyper-v 的保留端口才是大坑,导致 8080,3306 等端口提示被占用,但是通过命令行查询不到使用该端口的进程

  • 資深大佬 : iccfish

    @jim9606 主要是内核功能都能用;至于性能差异,你这说的不对。

    1. WSL1 的 IO 性能要远高于 WSL2,因为 WSL2 走的是 9P 协议,而 WSL1 用的是 lxfs,性能更高(差异非常明显,比如你用的是 zsh 加自动补全,那在 /mnt/c 下,WSL1 接近可用,而 WSL2 会非常卡)。我测试下来,WSL1 下,访问 NTFS 分区的性能,WSL1 接近于原生速度( NVME 的硬盘,写入速度接近 1GB/S ),但是在 WSL2 下就只有 97.3M/S (数据见后)
    2. WSL2 的 CPU 性能比 WSL1 高,因为不用经过内核转换(但是实际看起来不是特别明显),在 CPU 密集型的应用下会有影响,比如编译

    WSL1 下测试磁盘性能和结果:
    time dd if=/dev/zero of=/mnt/c/TEMP/wsl bs=8k count=100000
    100000+0 records in
    100000+0 records out
    819200000 bytes (819 MB, 781 MiB) copied, 0.829945 s, 987 MB/s
    dd if=/dev/zero of=/mnt/c/TEMP/wsl bs=8k count=100000 0.11s user 1.42s system 99% cpu 1.538 total

    WSL2 下测试磁盘性能和结果:
    time dd if=/dev/zero of=/mnt/c/TEMP/wsl bs=8k count=100000
    100000+0 records in
    100000+0 records out
    819200000 bytes (819 MB, 781 MiB) copied, 8.41766 s, 97.3 MB/s
    dd if=/dev/zero of=/mnt/c/TEMP/wsl bs=8k count=100000 0.34s user 1.32s system 19% cpu 8.479 total

  • 資深大佬 : iccfish

    @jim9606 补充一下就是,由于 WSL2 是真正的 linux 文件系统,所以这下面的原生( WSL2 内文件)性能以及权限这些要比 WSL1 好,上面说的是互通访问,即 WSL 里访问宿主机的文件系统。

  • 資深大佬 : linxl

    @forrestshuang
    PS C:UsersAdministrator> wsl -l
    适用于 Linux 的 Windows 子系统:
    Ubuntu-18.04 (默认)

    结果如上,表示看不懂这是 wsl1 还是 2 。。

  • 資深大佬 : iccfish

    @linxl 要加 -v 参数:

    wsl -l -v
    NAME STATE VERSION
    * Ubuntu Running 1
    Ubuntu-20.04 Stopped 2

  • 資深大佬 : linxl

    @iccfish 这个命令它只提示我 wsl 命令的各种选项,那估计我这个是 wsl1 了

  • 資深大佬 : hakono

    wsl2 搞了这么多年,连个静态 ip 都不给,本来是想把工作从 Linux 上迁移到 wsl2 上的,但是怎奈何 wsl2 实在是扶不起来

    比如,我这么个简单的问题至今没有人能解决(估计微软也不想解决)
    https://www.v2ex.com/t/668362

  • 資深大佬 : hakono

    @hakono 漏了重要的关键字 “本来是想把工作从 Hyper-V 的 Linux 虚拟机 迁移到 wsl2 上的”

  • 資深大佬 : iccfish

    @linxl WSL2 目前正式版的 win10 上还没有。

  • 資深大佬 : dawnh

    @iccfish 关于磁盘性能实际上 wsl 的目标和你的结果是相反的,也就是提供更加高的 IO 性能。其实 WSL1 的 IO 反倒是一直被诟病的。WSL2 则是给了 2 个方式:
    在根目录下的文件访问是走 utility VM 的原生 ext4 文件读写是.vhdx,性能接近原生 ext4 。支持 POSIX 文件权限和 ACL 。但是如果要在 Windows 下访问则需要\WSL$pathtofile 这样走 Plan9 。
    /mnt/<drive>是用 Plan9 mount 的 Windows 文件系统,性能一般,但可以无缝在 Windows 下互操作,对于文件系统特性支持有限。

    你如果追求 IO 性能,则不应该把 WSL2 的文件放在 /mnt/<drive>下面,而是保持在 ext4 文件系统下。另外好像 WSL2 还有方法 mount 一个新的.vhdx 作为数据盘。

  • 資深大佬 : jim9606

    @iccfish IO 性能这边我听分析是说 defender 自动实时扫描 wsl 目录导致性能下降的,加一下白名单就可以解决。
    我比较关注互通能力,纯计算的我还是搞个正经 VM 做就是了。

  • 資深大佬 : iccfish

    @jim9606 不是,这是互通方案决定的,和 defender 没有任何关系。

  • 資深大佬 : iccfish

    @dawnh WSL1 的 IO 性能还算可以了。至少没有明显瓶颈。我上面测试也印证了在 WSL1 下,NTFS 分区读写速度接近原生( 1GB/S )。ext4 的读写性能于我没多少价值,毕竟那和一个纯粹的 VM 里的读写性能没有啥区别。P9 协议走网络,太慢了,不是一般。WSL2 下读写 ext4 的性能高不高我不是很在意,但是访问宿主机的磁盘速度比 WSL1 慢上将近十倍。而 WSL1 下 IO 性能一直没遇到什么问题。而且我一直看到的说法其实是 WSL1 下的 CPU 性能不高(相对于 WSL2 来说),我不太清楚你说的 WSL1 的 IO 一直被诟病是从哪些资料看到的,如有请指出。

    总之我用 WSL 最大的意义在于互通访问,且能使用 Linux 的工具集。在这前提下,除非是需要底层的功能,否则 WSL2 对我没有多大意义。

  • 資深大佬 : lonewolfakela

    @iccfish WSL1 访问 Linux 分区(也就是非 /mnt )的速度确实比 WSL2 要低得多……可以参考这里的评测:
    aHR0cHMlM0EvL3Z4bGFicy5jb20vMjAxOS8xMi8wNi93c2wyLWlvLW1lYXN1cmVtZW50cy8=

  • 資深大佬 : lonewolfakela

    @iccfish 微软自己的文档也说了 WSL2 访问 linux 分区的速度提升很明显( aHR0cHMlM0EvL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dzbC9jb21wYXJlLXZlcnNpb25z ):
    “File intensive operations like git clone, npm install, apt update, apt upgrade, and more are all be noticeably faster with WSL 2.

    The actual speed increase will depend on which app you’re running and how it is interacting with the file system. Initial versions of WSL 2 run up to 20x faster compared to WSL 1 when unpacking a zipped tarball, and around 2-5x faster when using git clone, npm install and cmake on various projects.”

  • 資深大佬 : forrestshuang

    @hakono 用静态 IP, 直接用我的上面的脚本就好了。

  • 資深大佬 : hakono

    @forrestshuang 看了下 python 脚本的原理是编辑 windows 和 wsl2 的 hosts,动态设置 wsl.ip 的解析地址,并不是静态 ip 啊,依旧没法解决 wsl2 文件没法共享给局域网的问题

    比如试想这个场景,我宿主机上还有一台 windows 虚拟机(或者我在局域网有另一台电脑),我想在 windows 虚拟机里或者局域网里访问 wsl2 中的文件,不给 wsl2 一个真正的静态 ip 是没法解决这个问题的

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具