admin 管理员组

文章数量: 1184232

适用对象:已安装或准备安装 Docker Desktop 的 Windows 11 用户;需要一个可用的 Linux 开发环境。


目录

  1. 什么是 WSL:简史、原理与架构
  2. 快速安装(联网最省事)
  3. 首次初始化与基础配置
  4. 和 Docker Desktop 协同工作(你已安装 Docker 的情况下)
  5. 常用命令速查(管理发行版/备份迁移/更新)
  6. 文件系统与路径互通(含性能与权限建议)
  7. 网络与代理设置(含“localhost 代理未镜像到 WSL/NAT 模式”解决)
  8. 性能与资源配额(.wslconfig)
  9. 离线/半离线安装方案(无商店/弱网环境)
  10. 常见问题与故障排查
  11. 日常使用小抄(Cheat Sheet)

1) 什么是 WSL:简史、原理与架构

1.1 简史

  • WSL1(2016) :系统调用翻译层。没有真正的 Linux 内核,兼容性较好但不完整,I/O 性能不错,Docker 等依赖内核特性的场景受限。
  • WSL2(2019+) :引入了真实 Linux 内核,通过轻量级 Hyper-V 虚拟化运行。兼容性与容器场景全面提升,I/O 在跨盘访问时有开销;默认已成为主流。

1.2 架构与关键概念

  • 真实内核 + 轻量虚拟化:WSL2 在后台运行一个精简虚拟机(你能在任务管理器里看到 Vmmem 进程)。
  • 虚拟磁盘:Linux 发行版的根文件系统存放在一个 ext4.vhdx 虚拟磁盘中。
  • 文件互通:Windows 盘符通过 9P/Plan9 协议挂载到 Linux /mnt/c 等路径;反向在资源管理器可用 \\wsl$\发行版名 访问 Linux 文件。
  • 网络:默认 NAT;新版本支持 mirrored(镜像)网络,能更好处理本机回环与代理场景。
  • WSLg(Win11):原生支持在 Windows 桌面显示 Linux GUI 应用(例如 geditgnome-calculator)。

2) 快速安装(联网最省事)

前置:Windows 11 已开启虚拟化(BIOS 中 Intel VT-x/AMD SVM),并以管理员身份打开 PowerShell 或 Windows Terminal。

# 查看 WSL 状态与版本
wsl --status

# 一键安装(默认会装最新版 WSL 与默认发行版,通常是 Ubuntu)
wsl --install

# 或者直接指定发行版(推荐 Ubuntu LTS)
wsl --install -d Ubuntu
# 其它可选:Ubuntu-22.04、Debian、openSUSE-Tumbleweed 等

# 设定默认使用 WSL2(通常已是 2,为保险起见)
wsl --set-default-version 2

# 更新 WSL 组件(含内核)
wsl --update

安装完成后,开始菜单会出现你选择的 Linux 发行版(如 Ubuntu)。第一次启动会让你创建 Linux 用户名与密码。


3) 首次初始化与基础配置

进入发行版终端后,建议先:

# 更新与常用工具
sudo apt update && sudo apt -y upgrade
sudo apt -y install build-essential git curl wget unzip zip htop ca-certificates

# 可选:设置中文本地化(按需)
# sudo apt -y install language-pack-zh-hans
# sudo update-locale LANG=zh_CN.UTF-8

# Python/Node/Go 等按需安装
# sudo apt -y install python3-pip python3-venv
# curl -fsSL https://deb.nodesource/setup_lts.x | sudo -E bash - && sudo apt -y install nodejs

VS Code 集成(推荐)

  1. Windows 侧安装 VS Code 与扩展 Remote - WSL
  2. 在 Linux 目录(如 /home/<你的用户>/project)右键“在终端中打开”,运行 code . 即可在 Windows 窗口中编辑 Linux 内的代码。

4) 和 Docker Desktop 协同工作

你已安装 Docker Desktop,默认它运行在 WSL2,并在 WSL 里挂了两个内部发行版:docker-desktopdocker-desktop-data

4.1 在你自己的发行版里直接用 Docker CLI

# 在 Ubuntu/Debian WSL 中直接执行即可
docker version
docker ps

如提示权限问题,先打开 Docker Desktop → Settings → Resources → WSL Integration,勾选你自己的发行版(如 Ubuntu)。

4.2 建议工作流

  • 代码放在 Linux 主目录(例如 ~/workspace),避免在 /mnt/c 下开发导致 I/O 性能下降。
  • 通过 docker composedocker exec -it 等在 WSL 中进行容器日常操作,体验更接近原生 Linux。

5) 常用命令速查

# 列出已安装发行版及其 WSL 版本\ nwsl -l -v

# 设置默认发行版
wsl --set-default <发行版名>

# 将发行版转换到 WSL2(或 1)
wsl --set-version <发行版名> 2

# 关闭/重启所有发行版(应用配置变更必备)
wsl --shutdown

# 卸载某个发行版(危险,等同重置)
wsl --unregister <发行版名>

# 导出备份
wsl --export <发行版名> D:\backup\ubuntu.tar

# 从备份导入为新发行版
wsl --import <新名> D:\WSL\Ubuntu D:\backup\ubuntu.tar --version 2

# 查看 WSL 组件状态/版本
wsl --status
wsl --version

6) 文件系统与路径互通

  • Linux 主目录/home/<user>(建议把项目仓库放这里,性能最佳)。

  • 访问 Windows 盘/mnt/c, /mnt/d……

  • 在资源管理器访问 Linux:地址栏输入 \\wsl$\Ubuntu\home\<user>

  • 路径互转

    # Linux → Windows
    wslpath -w ~/.ssh
    # Windows → Linux
    wslpath 'C:\Users\你\Desktop'
    
  • 保留可执行权限(在挂载的 Windows 盘) :可在 Linux 中编辑 /etc/wsl.conf

    [automount]
    options = "metadata,umask=22,fmask=11"
    

    保存后 wsl --shutdown 使其生效。


7) 网络与代理设置(含 NAT/mirrored 与代理问题)

7.1 NAT 与镜像网络(mirrored)

  • NAT(默认) :WSL 与宿主处于私网,访问外网正常,但某些“回环(localhost)代理”与端口发现会受限。
  • mirrored(镜像)网络:让 WSL 与宿主共用网络栈,解决本机代理/回环端口不可达、容器互访等问题。

启用方法(Windows 用户目录下新建/编辑 %UserProfile%\\.wslconfig):

[wsl2]
networkingMode=mirrored
localhostForwarding=true
dnsTunneling=true
autoProxy=true

保存后执行:

wsl --shutdown

再进入发行版。

7.2 修复“检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。”

出现该提示通常是 Windows 设置了 127.0.0.1:端口 的系统代理,而 WSL 仍是 NAT 模式。

解决路径 A(推荐) :切到 mirrored 模式,步骤见上。

解决路径 B(继续用 NAT) :在 Linux 中把代理指向宿主机的真实 IP(非 127.0.0.1)。

# 取宿主 IP(WSL 自动写在 resolv.conf)
WIN_IP=$(awk '/nameserver/ {print $2; exit}' /etc/resolv.conf)
export http_proxy="http://$WIN_IP:7890"
export https_proxy="http://$WIN_IP:7890"
# 如为 socks5,按你的端口改成 socks5://$WIN_IP:xxxx

可将以上 export 写入 ~/.bashrc/etc/environment 长期生效。


8) 性能与资源配额(.wslconfig)

%UserProfile%\\.wslconfig 控制 WSL2 虚拟机的资源:

[wsl2]
memory=8GB        # 限制内存上限
processors=4      # 限制 CPU 核数
swap=0            # 关闭 swap(按需)
localhostForwarding=true
# networkingMode=mirrored  # 如需镜像网络

修改后执行 wsl --shutdown 生效。建议:

  • 项目放 Linux 主目录;
  • 大量小文件 I/O 时,避免 /mnt/c
  • 合理限制内存,防止 Vmmem 占用过高。

9) 离线/半离线安装方案

适用于无商店或外网不畅的环境。

方案 A:从他机下载发行版 rootfs,使用 wsl --import

  1. 在联网机器获取所需发行版的 rootfs(*.tar),拷到目标机。

  2. 目标机管理员终端执行:

    mkdir D:\WSL\Ubuntu
    wsl --import Ubuntu D:\WSL\Ubuntu D:\pkg\ubuntu-22.04-rootfs.tar --version 2
    wsl -d Ubuntu
    
  3. 首次进入后创建用户、更新系统。

方案 B:离线启用所需 Windows 功能

# 启用组件(无需重装系统)
DISM /Online /Enable-Feature /FeatureName:Microsoft-Windows-Subsystem-Linux /All /NoRestart
DISM /Online /Enable-Feature /FeatureName:VirtualMachinePlatform /All /NoRestart
# 重启后再执行 wsl --install 或方案 A 的 --import

10) 常见问题与故障排查

  • wsl 命令不存在/提示需要启用功能:用上面的 DISM 命令启用 WSL 与虚拟机平台,重启后再试。
  • BIOS 未开启虚拟化:进入 BIOS 开启 Intel VT-x/AMD SVM。
  • Docker 在 WSL 中不可用:在 Docker Desktop → Settings → Resources → WSL Integration 勾选你的发行版;或重装 Docker Desktop。
  • 端口访问异常:尝试启用 networkingMode=mirrored;或在 NAT 模式下使用宿主机 IP(/etc/resolv.conf 中的 nameserver)。
  • 磁盘空间暴涨:删除不需要的镜像/容器;备份并 --import 到新位置;或在具备 Hyper-V 的环境使用 Optimize-VHD 压缩 ext4.vhdx(进阶操作,务必先备份)。
  • 时间/时区问题:通常随宿主同步,若偏差可 wsl --shutdown 再进入;Linux 内设置 TZtimedatectl(WSL 支持有限)。

11) 日常使用小抄(Cheat Sheet)

# 更新系统
sudo apt update && sudo apt -y upgrade

# 新建工作目录
mkdir -p ~/workspace && cd ~/workspace

# Git 基本设置
git config --global user.name "你的名字"
git config --global user.email "你@example"

# Python 虚拟环境(示例)
python3 -m venv .venv && source .venv/bin/activate
pip install -U pip

# Docker 常用
docker ps
docker images
docker compose up -d

# WSL 互操作示例(在 Linux 里调用 Windows 程序)
explorer.exe .        # 打开当前目录
notepad.exe README.md # 用记事本编辑

# 路径互转
wslpath -w ~          # Linux → Windows
wslpath "C:\\Users\\\\Desktop"  # Windows → Linux

结束语

  • 对于已安装 Docker Desktop 的你,**新增一个“自己的 WSL 发行版”**能带来完整、顺手的 Linux 开发体验。
  • 如果遇到网络/代理提示(localhost 未镜像),优先尝试 mirrored 网络 配置;或改用宿主 IP 代理。
  • 本文档可作为你安装、使用、排错的一体化参考,建议收藏。

本文标签: 全攻略 故障 原理 Windows WSL