跳转至

WSL 记录

概述

发现使用 wsl + docker + vs code(remote wsl + remote container 插件) 可以让开发、部署、运行整个流程变得更加方便。因此想写一篇文章记录接触 wsl 后了解到的一些知识以及遇到的一些问题以及解决方案(长期更新)。

WSL1 原理

微软官方 wsl 博客中有一个系列文章介绍 wsl1 的原理,在阅读其中关于系统调用内容后发现没有想象中的难懂,反而学到了许多知识,因此把它记录下来。

系列博客

  1. Windows Subsystem for Linux Overview
  2. Pico Process Overview
  3. WSL system Calls
  4. WSL File System Support
  5. 其它

设置 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]

参考

  1. microsoft doc: wsl-config

  2. microsoft doc: wsl1/2 compare