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

2020-05-13 11:47:53 +08:00
 cai314494687
这两天搭建了 WSL2 环境,在里面安装好了 docker 和 laradock,localhost 可以成功访问,但是配置的 nginx sites 之后使用域名方式访问 WSL2 容器,一直没成功,提示 ERR_CONNECTION_REFUSED,查了半天资料也没看到解决方案,是我姿势不对还是本身就不支持这种方式?
17623 次点击
所在节点    程序员
43 条回复
linxl
2020-05-14 13:25:14 +08:00
@forrestshuang
PS C:\Users\Administrator> wsl -l
适用于 Linux 的 Windows 子系统:
Ubuntu-18.04 (默认)

结果如上,表示看不懂这是 wsl1 还是 2 。。
iccfish
2020-05-14 13:27:45 +08:00
@linxl 要加 -v 参数:

wsl -l -v
NAME STATE VERSION
* Ubuntu Running 1
Ubuntu-20.04 Stopped 2
linxl
2020-05-14 13:32:34 +08:00
@iccfish 这个命令它只提示我 wsl 命令的各种选项,那估计我这个是 wsl1 了
hakono
2020-05-14 14:29:09 +08:00
wsl2 搞了这么多年,连个静态 ip 都不给,本来是想把工作从 Linux 上迁移到 wsl2 上的,但是怎奈何 wsl2 实在是扶不起来

比如,我这么个简单的问题至今没有人能解决(估计微软也不想解决)
https://www.v2ex.com/t/668362
hakono
2020-05-14 14:29:56 +08:00
@hakono 漏了重要的关键字 “本来是想把工作从 Hyper-V 的 Linux 虚拟机 迁移到 wsl2 上的”
iccfish
2020-05-14 15:53:17 +08:00
@linxl WSL2 目前正式版的 win10 上还没有。
dawnh
2020-05-14 17:12:53 +08:00
@iccfish 关于磁盘性能实际上 wsl 的目标和你的结果是相反的,也就是提供更加高的 IO 性能。其实 WSL1 的 IO 反倒是一直被诟病的。WSL2 则是给了 2 个方式:
在根目录下的文件访问是走 utility VM 的原生 ext4 文件读写是.vhdx,性能接近原生 ext4 。支持 POSIX 文件权限和 ACL 。但是如果要在 Windows 下访问则需要\\WSL$\path\to\file 这样走 Plan9 。
/mnt/<drive>是用 Plan9 mount 的 Windows 文件系统,性能一般,但可以无缝在 Windows 下互操作,对于文件系统特性支持有限。

你如果追求 IO 性能,则不应该把 WSL2 的文件放在 /mnt/<drive>下面,而是保持在 ext4 文件系统下。另外好像 WSL2 还有方法 mount 一个新的.vhdx 作为数据盘。
jim9606
2020-05-14 18:06:15 +08:00
@iccfish IO 性能这边我听分析是说 defender 自动实时扫描 wsl 目录导致性能下降的,加一下白名单就可以解决。
我比较关注互通能力,纯计算的我还是搞个正经 VM 做就是了。
iccfish
2020-05-15 01:23:09 +08:00
@jim9606 不是,这是互通方案决定的,和 defender 没有任何关系。
iccfish
2020-05-15 01:27:50 +08:00
@dawnh WSL1 的 IO 性能还算可以了。至少没有明显瓶颈。我上面测试也印证了在 WSL1 下,NTFS 分区读写速度接近原生( 1GB/S )。ext4 的读写性能于我没多少价值,毕竟那和一个纯粹的 VM 里的读写性能没有啥区别。P9 协议走网络,太慢了,不是一般。WSL2 下读写 ext4 的性能高不高我不是很在意,但是访问宿主机的磁盘速度比 WSL1 慢上将近十倍。而 WSL1 下 IO 性能一直没遇到什么问题。而且我一直看到的说法其实是 WSL1 下的 CPU 性能不高(相对于 WSL2 来说),我不太清楚你说的 WSL1 的 IO 一直被诟病是从哪些资料看到的,如有请指出。

总之我用 WSL 最大的意义在于互通访问,且能使用 Linux 的工具集。在这前提下,除非是需要底层的功能,否则 WSL2 对我没有多大意义。
lonewolfakela
2020-05-15 09:40:55 +08:00
@iccfish WSL1 访问 Linux 分区(也就是非 /mnt )的速度确实比 WSL2 要低得多……可以参考这里的评测:
aHR0cHMlM0EvL3Z4bGFicy5jb20vMjAxOS8xMi8wNi93c2wyLWlvLW1lYXN1cmVtZW50cy8=
lonewolfakela
2020-05-15 09:45:45 +08:00
@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
2020-05-15 11:39:27 +08:00
@hakono 用静态 IP, 直接用我的上面的脚本就好了。
hakono
2020-05-15 13:21:52 +08:00
@forrestshuang 看了下 python 脚本的原理是编辑 windows 和 wsl2 的 hosts,动态设置 wsl.ip 的解析地址,并不是静态 ip 啊,依旧没法解决 wsl2 文件没法共享给局域网的问题

比如试想这个场景,我宿主机上还有一台 windows 虚拟机(或者我在局域网有另一台电脑),我想在 windows 虚拟机里或者局域网里访问 wsl2 中的文件,不给 wsl2 一个真正的静态 ip 是没法解决这个问题的
iccfish
2020-05-16 02:26:45 +08:00
@lonewolfakela 额。我想我大概知道你的意思,咱俩说的不是一回事,我说的是互通的。毕竟用 WSL 更希望的是能实现 Windows 和 Linux 的互通访问,而不是纯粹访问的 Linux 分区。访问 Linux 分区的话,WSL2 和虚拟机没啥区别啊,这不是优势。和宿主的互通才是优势。所以访问纯粹的 linux 分区( windows 没法访问,或必须通过网络共享访问)速度提升,在我看来和技能树点错没啥区别 :-)
lonewolfakela
2020-05-16 09:26:18 +08:00
@iccfish 我只是想指出“WSL1 的 IO 一直被诟病是从哪些资料看到的”这个说法的一些来源而已。
以及确实不是所有人都更希望互通访问……比如我日常使用的时候就更希望有一个能够配置方便、启动迅速的小虚拟机能够顺手编译一些东西,大规模的文件互通倒是需求不大……
dawnh
2020-05-19 16:19:52 +08:00
@iccfish 官方文档 https://docs.microsoft.com/en-us/windows/wsl/wsl2-about:
Increased file IO performance
File intensive operations like git clone, npm install, apt update, apt upgrade, and more will all be noticeably faster. 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.

Channel9 开发者频道有视频演示实际速度比较,在重 IO 访问情况下保底有 2 倍性能提升,具体就不放链接了。
iccfish
2020-05-20 16:04:07 +08:00
@dawnh 你发的这个我懂。我上面说过了,我说的不是 WSL2 里访问虚拟机本身文件系统的性能( eg. ext4 ),这个文件系统只能在 WSL2 里访问,在外面的宿主( Windows10 )里只能通过共享访问,性能贼差。我一直说的性能,是跨宿主访问的性能(如 WSL 里访问 NTFS 分区、Windows 里访问 WSL 里的系统文件)。
iccfish
2020-05-20 16:05:59 +08:00
@lonewolfakela 我持相反意见,我反倒认为越是“日常使用的时候、能顺手编译一些东西”,越需要随时的互通。比如我下载了一个小工具的源码,当然是 windows 里下载的,我肯定期望的是下载了解压了随手开个 WSL 就很快的编译了,而绝对不是还要启动到 WSL2 里,为了提高 IO 速度,先把文件从 NTFS 分区拷贝到 WSL2 里的 Ext4 分区上。
liu35118665
2020-06-30 11:28:05 +08:00
其实我想不通 wsl2 的定位到底是什么,如果要完整的 linux 体验,那就该提供完整的虚拟机一样的能力啊,在这个基础上提供些 wsl 特有的增强能力即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671206

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX