没有NAS不要愁!Windows使用WSL安装docker容器体验服务器功能
摘要
本文介绍了在 Windows 11 上安装并配置 WSL 的全过程。首先检查虚拟化并安装 Debian 系统。针对 WSL 命令繁琐的问题,推荐使用 WSL Dashboard 进行可视化管理。随后详细配置了系统环境,包括安装 Docker、国内源、SSH 服务及面板(如 KPanel),并调整网络模式。最后通过防火墙设置实现局域网访问,适合无 NAS/VPS 用户搭建本地服务器。
前言
想体验 Docker 容器的乐趣,但手头既没有 NAS,也没有一台能长期开机的 VPS?其实很多人忽略了一个现成的"服务器"——就是手头这台 Windows 电脑。
前两天我试用了一下微软新发布的 WSLC(WSL for Cloud,新一代容器版 WSL)跑 docker,确实解决了内存占用的问题。但这个应用还处在初级阶段:只能装在 Windows 11 上、不支持可视化面板、也不支持 docker compose,对我来说还不太可用。所以我装回了原版 WSL。(想了解那条新路线可以看这篇:微软原生容器方案 WSLC 实测,两者并不冲突,可以共存。)
WSL 本质上是 Hyper-V 虚拟机,可以跑完整的 Linux 系统,功能没有被阉割。也就是说,你完全可以把它当成一台"常驻的迷你 Linux 服务器"来用:跑 Docker、开服务、做实验,甚至配合内网穿透在公网访问。这篇就把完整流程走一遍。
一、先搞清楚 WSL2 到底是什么
很多人把 WSL 当成"模拟器",这个理解会带来一连串错误判断,先说清楚:
WSL1 | WSL2 | |
|---|---|---|
原理 | 系统调用翻译层(把 Linux 调用实时翻译成 Windows 调用) | 轻量级 Hyper-V 虚拟机,跑一个真实的 Linux 内核 |
速度 | 文件 IO 快 | 文件 IO 略慢(跨系统访问时) |
兼容性 | 差(大量 syscall 未实现) | 完整,等于真 Linux |
能否跑 Docker | 不能 | 能 |
所以"WSL 能不能跑 Docker"这个问题的答案,取决于版本:WSL1 跑不了(缺 syscall + 没有独立内核),WSL2 可以。而正因为 WSL2 是一台真实虚拟机,它才需要 CPU 虚拟化支持 —— 这也直接决定了下一步的前置检查。
顺便解释一个经典抱怨:"为什么 WSL 里编译项目比原生慢?" 因为跨系统访问(在 WSL 里读写 /mnt/c/...)要经过一层文件共享协议,元数据操作(大量小文件 stat)开销特别大。对策很简单:把代码放在 Linux 侧目录(比如 ~/project),而不是留在 /mnt/c/Users/... 下面 —— 性能差异非常明显。
二、前置条件
动手前先确认两件事:
检查是否开启了虚拟化:打开任务管理器 → 性能,看"虚拟化"是否显示已开启。如果没有,需要重启进 BIOS,找到 Intel VT-x / AMD SVM 之类的选项开启。

2. 网络:WSL 安装和后续拉取 Linux 系统需要联网。这一步我看到很多小伙伴会遇到问题,但通常需要自己想办法解决(比如检查代理设置),这里就不展开。
三、安装 WSL 和 Debian
以 Debian 为例,安装 WSL 和对应的 Linux 虚拟机:
--name debian:给这个虚拟机起个名--location c:/wsl/debian:指定它存放的位置(避免默认占满 C 盘) 运行命令后,系统会先安装 WSL,中途会要求你输入新建的用户名和密码,完成后会自动进入这个 Linux 环境。
退出虚拟机,输入
exit:

3. 查看当前有哪些虚拟机,输入 wsl -l:

4. 查看可以安装哪些 Linux 系统,输入 wsl -l -o。除了 Debian,你也可以装 Ubuntu 等其他系统。

5. 想启动后直接进入用户目录,输入 wsl ~ 即可。

6. 关闭整个 WSL 虚拟机,用 wsl --shutdown(注意这会把所有发行版都停掉)。 7. 设置虚拟机资源:打开 WSL 的设置面板(新版支持 .wslconfig 或图形设置),可以调整 CPU 数量、内存大小、硬盘大小,按你电脑的实际配置分配即可。

8. 重点:改网络模式。把网络模式改成 mirrored(镜像),同时勾选"主机地址环回"。这样就能直接用本机的 IP 地址来访问 Docker 容器了,不用再管 WSL 内部的 IP 映射,省很多事。

9. 删除某个虚拟机(比如 debian),用 wsl --unregister debian。 10. 彻底卸载 WSL,用 wsl --uninstall。
关于第 6 步:--shutdown 和 --terminate 的区别
这两个命令经常被混用,但行为不一样:
想让 WSL 真正把占用的内存还给 Windows,必须用 --shutdown。但注意:下一次你打开任何 WSL 窗口时它会重新启动(大约几秒),所以"关机前 shutdown 一下"是个不错的省内存习惯。
关于第 7 步:手动写 .wslconfig 限制资源(强烈建议)
设置面板能用,但更推荐直接改配置文件,因为可控项更多、也便于备份。文件位置在 Windows 用户目录下:
内容示例:
为什么一定要手动限? 因为 WSL2 默认会吃掉宿主机相当大比例的内存(早期是 50%,后续版本最高可到 80%),结果就是"我明明没开什么程序,Windows 却开始卡、浏览器开始崩" —— 这是 WSL 用户最普遍的抱怨,根因就在这里。给它划一条线,两边都舒服。
关于第 8 步:mirrored 网络模式到底改了什么
这一步是体验分水岭,值得说清原理:
旧模式(NAT):WSL 里跑着一个独立的虚拟网卡,有自己的 IP 段(如
172.x.x.x)。后果是 —— 容器端口只监听在 WSL 内部,局域网其它设备访问不到,要用netsh interface portproxy手工做端口转发,非常绕新模式(mirrored):WSL 直接共享宿主机的网络接口和 IP,不再单独建 NAT 网卡。于是容器端口就直接暴露在主机 IP 上,手机、电视、其它电脑都能直接访问,
localhost也变成双向可达
代价也有:可能和宿主机上已有程序抢占端口;和某些 VPN、防火墙软件会有冲突。但在"把 WSL 当服务器用"这个场景里,mirrored 是必选项 —— 没有它,你在局域网里根本访问不到容器。
四、可视化:装个 WSL Dashboard
纯命令行的 WSL 要记很多命令,尤其是跑多个发行版时,管理起来有点麻烦——备份、自启动这些功能都要敲复杂的指令。不想记命令的话,可以装这个开源项目 WSL Dashboard。项目地址:https://github.com/owu/wsl-dashboard/

它支持一键安装、列出、启动、停止、取消注册,并且能从一个地方统一配置你的各个 WSL 发行版,把最麻烦的管理操作都变成了点按钮。
五、把它当服务器用起来
WSL 本质是一个虚拟机里的 Linux 系统,所以照服务器的配置方法设置就可以了。下面列一些必备的基础设置:
安装 curl 工具:

2. 换国内软件源(不然 apt 下载慢):

3. 安装 Docker:

4. 开启 SSH,方便从外面连进来管理:
安装一个面板,让 Linux 操作更顺手。1panel、宝塔都可以,我自己装的是 KPanel:

6. 如果应用无法从局域网其他设备打开,可能是 Hyper-V 虚拟机的防火墙挡住了。用 PowerShell 管理员权限运行下面的命令,放行默认入站:

第 6 步那条长命令是什么意思? 它修改的是 Hyper-V 虚拟交换机的入站默认策略。WSL2 的流量在 Windows 看来是"来自虚拟网卡"的,会走 Hyper-V 自己的防火墙,而默认策略是"拒绝入站" —— 这就导致"WSL 里服务明明跑着、
curl localhost也通,但局域网其它设备就是连不上"。那条命令把默认入站从"拒绝"改成"允许"。⚠️ 提醒:这等于把虚拟机的入站全放开了。如果你在 WSL 里还跑着别的服务,请顺手在 Linux 侧用
ufw再收一道口子,别让 WSL 变成局域网里的"敞门房间"。
六、开机自动启动(当服务器用的关键一步)
WSL 默认不会开机自启,你得手动开个窗口它才起来 —— 这显然不符合"服务器"的定位。两个办法:
① 开启 systemd(推荐,先做这一步)
WSL 默认不启用 systemd,容器/服务无法用 systemctl enable 管理。在 Linux 里创建 /etc/wsl.conf:
保存后执行 wsl --shutdown 再重进,systemctl status 就正常了。之后 nginx、docker 这类服务都能设成开机自启。
② 让 WSL 随 Windows 登录启动
用 Windows「任务计划程序」新建一个任务:
触发器:登录时
操作:启动程序
wsl.exe,参数填-d debian -u root --exec /bin/true
/bin/true 的用意是"启动虚拟机并立刻退出进程",虚拟机保持运行,但不会弹出窗口。也可以用前面装的 WSL Dashboard 里的自启功能,一键搞定。
七、一个容易踩的坑:磁盘只涨不缩
WSL 的 Linux 文件系统存在一个虚拟磁盘文件里(ext4.vhdx),它是稀疏文件,只增不减。
意思是:你把容器、镜像、日志删掉之后,Linux 里显示空间释放了,但 Windows 上那个 vhdx 文件还是原来那么大,C 盘空间并没有回来。这是很多人的困惑来源。
想真正回收空间,两个办法:
方法二会让磁盘文件实际缩回真实占用大小,代价是执行时不能有 WSL 在跑。定期做一次,比盲目扩大 C 盘更管用。
小结
走到这一步,你的 WSL 服务器就基本配置完成了,功能相当齐全。配合 WSL Dashboard,开机自启、目录访问这些原本很麻烦的操作都变得很轻松;再配合内网穿透,就能在公网访问跑在本地 WSL 里的应用了。
简单回顾一下关键点:
WSL2 是真实虚拟机(所以要开虚拟化),不是模拟器
网络模式选 mirrored,否则局域网访问不了容器
.wslconfig手动限内存,否则拖慢 Windows开 systemd + 任务计划程序自启,才算真正的"服务器"
定期压缩 vhdx,否则 C 盘只涨不缩
这套方案非常适合没有 NAS 或 VPS 的小伙伴用来学习 Docker、体验自托管,毕竟——你手头这台 Windows 电脑,本身就是一台随时可用的"服务器"。