Docker Desktop 默认只集成默认WSL发行版,因引擎仅在单个WSL实例运行;可通过Settings→WSL Integration逐个启用其他已运行的发行版,并共享同一容器运行时。

为什么 Docker Desktop 默认只认一个 WSL 发行版
Docker Desktop 启动时默认只集成 default 发行版(通常是首次安装的 Ubuntu),其他手动装的发行版(比如 Debian、Alpine 或自己重命名的 Ubuntu-24.04)不会自动启用。这不是 bug,而是设计:Docker Engine 只在一个 WSL 实例里运行,但你可以把多个发行版都“挂”进这个引擎里,共享同一套容器运行时。关键在于 WSL 集成开关是按发行版逐个开启的,不是全局打开就全生效。
如何在 Settings → WSL Integration 中启用多个发行版
必须先确保这些发行版已安装且状态为 Running,否则列表里根本不会出现它们:
- 打开 PowerShell,运行
wsl --list --verbose,确认目标发行版 VERSION 是 2、STATE 是Running - 如果 STATE 是
Stopped,运行wsl -d启动一次再退出(比如wsl -d Debian) - 启动 Docker Desktop,右键任务栏图标 → Settings → Resources → WSL Integration
- 勾选 Enable integration with my default WSL distro(它只是个快捷开关,不影响其他)
- 向下滚动,在 Enable integration with additional distros 区域,找到你要启用的发行版名称,单独勾选
- 点击 Apply & Restart —— 注意:这里会重启整个 Docker Engine,不是只刷新界面
完成后,所有启用的发行版都能执行 docker ps、docker build 等命令,且看到的是同一套容器列表。
启用后仍提示 “Cannot connect to the Docker daemon” 怎么办
常见于新启用的发行版首次使用,本质是 /var/run/docker.sock 权限或路径未同步到位:
- 不要在发行版里手动改
DOCKER_HOST,Docker Desktop 已通过 WSL 集成自动注入 socket 路径 - 检查该发行版是否禁用了 systemd:
cat /proc/1/comm输出不是systemd就正常,WSL 集成不依赖它 - 运行
ls -l /var/run/docker.sock,应显示软链接指向/mnt/wsl/docker-desktop-data/docker.sock - 如果链接损坏或权限为
root:root且当前用户不在docker组,运行sudo usermod -aG docker $USER,然后彻底退出 WSL(wsl --terminate)再重进
多个发行版共用 Docker 引擎的副作用
共享引擎带来便利,也带来几个容易被忽略的约束:
- 所有发行版看到的
docker images、docker volume ls完全一致,无法隔离镜像存储 - 资源限制(CPU/Memory)是全局设置,在 Docker Desktop → Resources → WSL Integration 里统一配,不能按发行版单独设
- 如果你在
Ubuntu-22.04里docker build,生成的中间层缓存也会被Debian看到并复用——这是优点,但调试时容易误判缓存来源 -
wsl --shutdown会同时终止所有已启用集成的发行版,包括后台正在跑的容器(哪怕你只关了其中一个终端)
真正需要隔离的场景(比如测试不同 Linux 发行版下的构建行为),别靠多 WSL 发行版,直接用 docker build --platform 或起多个 FROM 不同基础镜像的容器更可控。











