docker-desktop是Docker Desktop专用的全局唯一WSL2发行版,仅运行dockerd守护进程和系统服务,所有容器均共享该实例的内核、守护进程及/var/lib/docker存储空间。

docker-desktop 这个 WSL2 发行版是共享的,不是每个容器一个
很多人看到 wsl -l -v 列出的 docker-desktop 和 docker-desktop-data 两个发行版,就以为它们是“给每个容器分配的独立 Linux 环境”。其实完全不是——这两个是 Docker Desktop 自己专用的、全局唯一的 WSL2 实例,所有你在 Windows 上启动的容器,都运行在这同一个 docker-desktop 宿主环境里。
它不随容器数量增加而复制,也不按项目隔离。你 docker run nginx 和 docker run postgres,底层用的都是同一套 WSL2 内核、同一个 dockerd 守护进程、同一块 /var/lib/docker 存储空间。
-
docker-desktop:只跑dockerd和少量系统服务,极精简,不可登录、不可改配置 -
docker-desktop-data:专用于持久化存储镜像层、容器可写层、卷(volume)数据,挂载在/var/lib/docker - 你手动安装的其他 WSL2 发行版(比如 Ubuntu)和这两个完全无关,彼此不共享网络、存储或进程空间
为什么 docker ps 在不同 WSL2 发行版里看不到相同容器
因为只有 docker-desktop 里运行着真正的 dockerd。你在自己装的 Ubuntu WSL2 里执行 docker ps,默认连的是本地 Unix socket(/var/run/docker.sock),但那个 socket 根本不存在——除非你手动配置 DOCKER_HOST 指向 docker-desktop 的监听地址。
常见错误现象:
- 在 Ubuntu WSL2 里执行
docker ps报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? - 即使装了
docker-cli,没配通通信通道,也看不到任何容器 - 误以为“我在 Ubuntu 里起的容器”和 Docker Desktop 里的容器是两套体系——其实根本没起成功
正确做法是显式指定连接目标:
export DOCKER_HOST=unix:///run/docker.sock # 或直接用 WSL2 interop 转发(推荐) export DOCKER_HOST=tcp://localhost:2375 # 并在 Docker Desktop 设置 → General → ✔️ “Expose daemon on tcp://localhost:2375 without TLS”
镜像层复用与容器隔离不依赖 WSL2 实例数量
容器之间的隔离性来自 Linux Namespace 和 Cgroups,不是靠开多个虚拟机。Docker Desktop 下所有容器共享同一个 WSL2 内核,但每个容器仍有独立的 PID、network、mount、UTS 等命名空间。镜像分层复用也发生在 docker-desktop-data 这个单一存储池内。
这意味着:
- 拉取一次
nginx:alpine,10 个基于它的容器全部共享只读层,磁盘不重复存 - 启动新容器只是叠加一个空的可写层(
overlay2的upperdir),毫秒级完成 - 删掉某个容器,只清它的可写层,基础镜像层和其他容器不受影响
- 你无法通过增减 WSL2 发行版数量来“扩容容器并发能力”——瓶颈在 CPU/内存/IO,不在实例数
容易被忽略的关键点:WSL2 实例本身不能当开发环境用
docker-desktop 是封闭管理的系统,禁止用户直接登录、安装软件、修改配置。有人试图 wsl -d docker-desktop 进去调环境变量、装 curl 或改 /etc/hosts,结果要么失败,要么下次 Docker Desktop 升级就自动重置。
真正该用的地方是:
- 调试容器网络问题时,进
docker-desktop-data查/var/lib/docker/network/files里的hostconfig.json - 清理磁盘时,进
docker-desktop-data手动du -sh /var/lib/docker/overlay2定位大层 - 排查构建卡死时,看
docker-desktop里ps aux | grep buildkit是否异常堆积
想有个可定制的 Linux 开发终端?用你自己的 Ubuntu/Debian WSL2 发行版,别碰 docker-desktop ——它不是给你用的,是给 dockerd 用的。











