Docker Desktop 好用,但有两个问题:一是商用要收费(250人以上企业 $21/人/月),二是它自己套了一层 Hyper-V 虚拟机,吃内存、占磁盘,启动还慢。
其实 WSL2 本身就是一个完整的 Linux 环境,直接在里面装 Docker Engine 就行——原生跑、不吃额外资源、完全免费。Windows 侧再装个管理工具,体验不比 Docker Desktop 差。
一、开启 systemd
Docker Engine 依赖 systemd 管理服务,WSL2 默认没开。先开它。
在 WSL 终端里编辑 /etc/wsl.conf:
sudo nano /etc/wsl.conf
写入:
[boot]
systemd=true
保存后,在 PowerShell 里重启 WSL:
wsl --shutdown
重新进 WSL,验证 systemd 是否生效:
systemctl --version
有版本号输出就说明 systemd 已启用。
二、安装 Docker Engine
在 WSL 终端里依次执行:
# 一键安装(Docker 官方脚本)
curl -fsSL https://get.docker.com | sudo sh
# 当前用户加入 docker 组,免 sudo
sudo usermod -aG docker $USER
# 启动 + 开机自启
sudo systemctl enable --now docker
安装完后退出 WSL 再重新进(让用户组生效),验证:
docker ps
能看到容器列表(空的也行)就说明 Docker Engine 已经在跑了。
和 Docker Desktop 的区别:
| 对比 | Docker Desktop | WSL 装原生 Docker Engine |
|---|---|---|
| 资源占用 | 额外 Hyper-V VM,吃 2-4GB 内存 | 直接跑在 WSL 里,零额外开销 |
| 商用许可 | 250人以上收费 | 完全免费,无限制 |
| Windows 版本 | 需 Pro/Enterprise | Home 版也能用 |
| 启动速度 | 要等 VM 启动 | WSL 起来就跟着起 |
| 管理界面 | 自带 GUI | 需自行装管理工具 |
三、开启 TCP 远程访问
默认 Docker 只监听 Unix socket,Windows 侧的管理工具连不上。需要开一个 TCP 端口。
编辑 /etc/docker/daemon.json:
sudo nano /etc/docker/daemon.json
写入:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
重启 Docker:
sudo systemctl restart docker
安全提示:
0.0.0.0:2375表示监听所有网卡。如果你在 mirrored 网络模式下,局域网设备理论上也能访问到这个端口。生产环境建议绑127.0.0.1或加 TLS 认证。本地开发用0.0.0.0没问题。
四、Windows 侧管理工具(三选一)
Docker Engine 跑在 WSL 里了,Windows 侧需要一个管理工具。根据你的使用习惯选一种。
方案 A:Portainer(Web 可视化管理,推荐)
在 WSL 里一行启动 Portainer:
docker run -d -p 9000:9000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
然后 Windows 浏览器打开 http://localhost:9000,设置个管理员密码就能用了。
Portainer 能做:
- 容器的启动/停止/重启/删除
- 镜像拉取、构建、清理
- 网络和卷的可视化管理
- Stack(Docker Compose)的在线编辑和部署
- 容器日志实时查看
- 资源占用监控
基本上 Docker Desktop GUI 能做的事它都能做,还多了 Stack 管理和多环境切换。
方案 B:LazyDocker(终端 TUI)
如果你更喜欢终端操作,LazyDocker 是个很好的选择:
# 装 Go(如果没装的话)
sudo apt install golang -y
# 装 lazydocker
go install github.com/jesseduffield/lazydocker@latest
# 加到 PATH
echo 'export PATH=$PATH:~/go/bin' >> ~/.bashrc
source ~/.bashrc
# 启动
lazydocker
LazyDocker 的界面:
- 键盘上下选容器,左右切 Tab(日志/Stats/Config/Top)
d删除容器,r重启,s停止,b批量操作- 底部直接显示 CPU/内存/网络实时曲线
- 镜像、卷管理也集成在里面
比 docker ps + docker logs + docker stats 来回切高效得多,而且是终端原生,SSH 连远程 Docker 也能用。
方案 C:Windows Docker CLI
如果你就是喜欢命令行,不想装任何 GUI:
在 Windows 侧装 Docker CLI(不装 Docker Desktop),设环境变量指向 WSL 里的 Docker Engine:
# 设置 DOCKER_HOST
setx DOCKER_HOST "tcp://127.0.0.1:2375"
重开 PowerShell,直接用:
docker ps
docker images
docker run -d -p 8080:80 nginx
需要 WSL 网络互通配置好(mirrored 模式或 localhost 转发),127.0.0.1:2375 才能通。
装 Docker CLI 的方法:从 Docker 官方 下载 Windows 版二进制,或用
winget install Docker.DockerCLI(只装 CLI 不装 Desktop)。
五、完整配置清单
WSL 侧:
| 文件 | 内容 |
|---|---|
/etc/wsl.conf | [boot] → systemd=true |
/etc/docker/daemon.json | hosts 加 tcp://0.0.0.0:2375 |
| Docker 服务 | sudo systemctl enable --now docker |
| Portainer | docker run -d -p 9000:9000 ... |
Windows 侧:
| 配置 | 值 |
|---|---|
%USERPROFILE%\.wslconfig | networkingMode=mirrored |
环境变量 DOCKER_HOST(可选) | tcp://127.0.0.1:2375 |
| 管理工具 | Portainer(Web)或 LazyDocker(TUI)或 Docker CLI |
小结
这套方案的核心思路:WSL 当 Linux 服务器,Windows 当管理终端。
Docker Engine 原生跑在 WSL 里,不套 Hyper-V VM,不吃额外内存。Windows 侧通过 TCP 端口或 Web 面板管理,体验不输 Docker Desktop。
最爽的是完全免费——不用管 Docker Desktop 的商用许可限制,Home 版 Windows 也能用,老电脑也跑得动。如果你还在用 Docker Desktop 的个人版,强烈建议试一下这套方案。

1万+

被折叠的 条评论
为什么被折叠?



