这篇记录一次完整的 WSL2 环境搭建:从 Windows 11 上装好 WSL 和 Ubuntu,到换源、更新、把代理配置成可持久化,最后接上 Docker 与 1Panel。

为什么不用 Debian

一开始我用的是 Debian 的 WSL 发行版,遇到的问题集中在生态上:

  • 系统极度精简,curl、sudo、ca-certificates 都要自己补
  • Docker 官方脚本会把 Debian 误判成 trixie,源直接报错
  • 和国内教程、面板(1Panel 等)的默认假设不一致,需要反复修依赖

建站环境本该是件省事的事,结果一半时间花在补系统上。换成 Ubuntu 之后这些摩擦基本消失,国内脚本和面板也默认按 Ubuntu 写文档。所以如果你打算在 WSL 里跑 Docker 或建站环境,直接选 Ubuntu 更省力。

前置条件

  1. BIOS/UEFI 中开启 CPU 虚拟化(Intel VT-x / AMD SVM)
  2. Windows 任务管理器 → 性能 → CPU,确认显示「虚拟化:已启用」

缺这一步后面 wsl --install 会失败,而且报错信息不直观,先确认省事。

安装 WSL 与 Ubuntu

以管理员身份打开 PowerShell 或 Windows Terminal:

POWERSHELL
wsl --install

默认会安装 Ubuntu,执行完按提示重启 Windows。首次启动 Ubuntu 时会让你创建 Linux 用户名和密码。

如果之前装过别的发行版(比如 Debian),可以先卸掉再装:

POWERSHELL
wsl -l -v
wsl --unregister Debian
wsl --install -d Ubuntu

--unregister 会删除该发行版及其数据,执行前确认里面没有要留的东西。

切换与确认版本

POWERSHELL
wsl -l -v
wsl --set-version Ubuntu 2
wsl --set-default-version 2

第三条让以后新装的发行版默认使用 WSL2。WSL1 和 WSL2 的网络模型完全不同,后面配代理时这个区别很关键。

更新 WSL 组件

装完建议跑一次:

POWERSHELL
wsl --update
wsl --shutdown
wsl --version

wsl --shutdown 会退出所有发行版并重启 WSL 虚拟机,改完配置后常用。

换源

Ubuntu 默认源在国内速度一般,换成清华源(腾讯云、阿里云同理):

BASH
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
BASH
sudo bash -c 'cat > /etc/apt/sources.list << "EOF"
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
EOF'

版本代号要对上:22.04 是 jammy,24.04 是 noble。写错了 apt update 会直接 404。

Ubuntu 24.04 之后默认使用 /etc/apt/sources.list.d/ubuntu.sources 这种 DEB822 格式,如果你在这个版本上操作,改的是那个文件而不是 sources.list。旧文件仍然能生效,只是不再是默认位置。

然后更新:

BASH
sudo apt update
sudo apt upgrade -y

代理:WSL2 里最容易踩的坑

为什么 127.0.0.1 不通

WSL2 默认是 NAT 网络。WSL 里的 127.0.0.1 指 WSL 自己,不是 Windows。如果你的代理软件在 Windows 上监听 127.0.0.1:10808,在 WSL 里用同一个地址是连不上的,有时还会看到「localhost 代理未镜像到 WSL」的提示。

稳定做法是让 WSL 指向 Windows 在虚拟网络里的地址,也就是默认网关。

取得宿主机地址

在 WSL 里执行:

BASH
ip route | grep default

输出类似:

TEXT
default via 172.24.240.1 dev eth0

172.24.240.1 就是 Windows 在 WSL 网络里的地址。这个地址每次重启 WSL 都可能变化,所以不要写死。

临时生效

假设代理软件的混合端口是 10808(HTTP 与 SOCKS5 同一个端口):

BASH
export http_proxy="http://172.24.240.1:10808"
export https_proxy="http://172.24.240.1:10808"
export all_proxy="socks5h://172.24.240.1:10808"
export no_proxy="localhost,127.0.0.1,::1"

测试:

BASH
curl -I https://www.google.com

持久化:每次自动取网关

写一个脚本,每次开 shell 都读取当前默认网关,再拼出代理变量:

BASH
cat > ~/.wsl-proxy.sh <<'EOF'
#!/usr/bin/env bash
WIN_IP=$(ip route | awk '/default/ {print $3; exit}')
PORT=10808

export http_proxy="http://${WIN_IP}:${PORT}"
export https_proxy="http://${WIN_IP}:${PORT}"
export all_proxy="socks5h://${WIN_IP}:${PORT}"
export no_proxy="localhost,127.0.0.1,::1"
EOF

chmod +x ~/.wsl-proxy.sh
grep -q "wsl-proxy.sh" ~/.bashrc || echo 'source ~/.wsl-proxy.sh' >> ~/.bashrc
source ~/.bashrc

这样不管 WSL 重启后网关变成什么,都能自动适配。

需要注意两件事:代理软件要允许「局域网连接」,否则 Windows 防火墙会挡掉来自 WSL 的请求;另外 no_proxy 里要保留 localhost 和 127.0.0.1,否则访问本机服务也会被绕进代理。

sudo 免密(仅限测试环境)

测试环境里频繁敲命令,每次输密码很烦。可以给当前用户配置免密:

BASH
sudo visudo

在文件末尾添加(msxx 换成你的用户名):

TEXT
msxx ALL=(ALL) NOPASSWD:ALL

保存后用 sudo ls 验证,不再要求密码就生效了。

正式环境不要这么做。 免密等于任何拿到该用户 shell 的人都能直接提权,省下的几秒钟不值这个风险。

Docker 与 1Panel

我没有单独装 Docker,而是在系统更新完成后直接跑 1Panel 的安装脚本。1Panel 检测到没有 Docker 会提示安装,并自动完成 Docker 镜像源切换。

在 Debian 上这一步经常要手动修源、修依赖,换到 Ubuntu 后基本是「一路回车」。这也是开头说换发行版的原因。

常用命令速查

POWERSHELL
wsl -l -v
wsl -d Ubuntu
wsl --shutdown
wsl --terminate Ubuntu
wsl --update
wsl --version
wsl --set-default-version 2
wsl --export Ubuntu D:\backup\ubuntu.tar
wsl --import Ubuntu D:\WSL\Ubuntu D:\backup\ubuntu.tar --version 2
wsl --unregister Ubuntu

--export / --import 可以用来备份和迁移整个发行版,换电脑时比重新配环境快得多。

小结

  • WSL2 默认 NAT,WSL 内不会自动使用 Windows 的 127.0.0.1 代理
  • 用默认网关地址拼代理变量最稳,用脚本自动取网关可以长期免维护
  • 换源时版本代号要对应(22.04 jammy / 24.04 noble),24.04 起改的是 ubuntu.sources
  • 装完记得跑 wsl --update 和 sudo apt update && sudo apt upgrade -y

相关内容

记录 AMD Ryzen 平台在 Windows 11 高频使用 WSL2 时出现随机蓝屏/重启(HYPERVISOR_ERROR 0x00020001)的根因与稳定修复方案:BIOS 关闭 C-State,并附 WSL2 推荐配置。

Windows 11WSL2故障排查

一台 2C4G VPS 上用 1Panel(LEMP + Docker)跑多个 WordPress,优化后后台变慢并出现 EdgeOne 524。本文按时间线复盘:如何从“缓存/超时”误区切换到“容器环回 + Docker 出网被 iptables FORWARD 掐死”的根因定位,最终用 host-gateway + iptables 持久化完成修复,并给出可复制的检查清单。

WordPress运维1Panel

搜索

开始搜索
↑↓
↵
ESC
Ctrl K快捷键