WSL 记录
概述¶
发现使用 wsl + docker + vs code(remote wsl + remote container 插件) 可以让开发、部署、运行整个流程变得更加方便。因此想写一篇文章记录接触 wsl 后了解到的一些知识以及遇到的一些问题以及解决方案(长期更新)。
WSL1 原理¶
微软官方 wsl 博客中有一个系列文章介绍 wsl1 的原理,在阅读其中关于系统调用内容后发现没有想象中的难懂,反而学到了许多知识,因此把它记录下来。
系列博客
- Windows Subsystem for Linux Overview
- Pico Process Overview
- WSL system Calls
- WSL File System Support
- 其它
设置 wsl 内存与 cpu 资源¶
编辑C:\Users\<yourUserName>\.wslconfig
内容
[wsl2]
kernel=C:\\temp\\myCustomKernel
memory=4GB # Limits VM memory in WSL 2 to 4 GB
processors=2 # Makes the WSL 2 VM use two virtual processors
其它资源设置参考[1]
访问网络应用程序¶
从 Windows (localhost) 访问 Linux 网络应用¶
直接通过 localhost 访问(注意,通过 127.0.0.1 访问会失败)
如果运行的是较旧版本的 Windows(版本 18945 或更低版本),则需要获取 Linux 主机 VM 的 IP 地址
从 Linux(主机 IP)访问 Windows 网络应用¶
如设置 git 使用 windows 的 socks 代理。
➜ ~ cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.31.144.1
使用该 ip 访问 windows 网络应用(注意,每次启动 wsl 该 ip 会变化,目前还没找到解决方式)
从局域网 (LAN) 访问 WSL 2 分发版¶
使用 wsl1 时,wsl 与主机共用 ip,因此如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。
使用 wsl2 时,wsl 有一个带有其自己独一无二的 IP 地址的虚拟以太网适配器(和主机所在的网段不一样,如:主机连接的路由器的网段为 192.168.1.0/24,而 wsl 所在的网段为 172.31.144.0/20,wsl 上网需要经过主机进行 NAT 转换),因此需要执行与常规虚拟机相同的步骤(端口转发)。
下面是一个示例 PowerShell 命令,用于添加侦听主机上的端口 4000 的端口代理并将其连接到端口 4000,并使用 IP 地址 172.31.157.77(WSL 的 ip 地址)连接到 WSL 2 VM。
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=172.31.157.77
其它参考[2]