Docker Desktop 默认仅集成默认WSL发行版,其他如openEuler-24.03或Debian-12需在Settings→Resources→WSL Integration中手动勾选“Additional distributions”并重启生效,否则执行docker命令会提示command not found。

Docker Desktop 默认只集成默认 WSL 发行版,其他发行版必须手动开启 —— 这不是 bug,是设计行为。如果你在 Ubuntu-22.04 里能跑 docker,但在 openEuler-24.03 或 Debian-12 里执行报 command not found,大概率就是没勾选对应发行版的集成开关。
为什么 Enable integration with my default WSL distro 不够用
这个选项只作用于当前系统级默认发行版(可通过 wsl --set-default <distro> 修改),它不会自动同步到你后续安装的其他 WSL 发行版。Docker Desktop 的 WSL Integration 页面底部“Additional distributions”列表才是实际控制面。
常见错误现象:
- 在非默认发行版中执行
docker --version提示bash: docker: command not found -
docker info报错Cannot connect to the Docker daemon,但 Docker Desktop 状态栏显示正常 - VS Code Dev Container 在某个 WSL 发行版中无法识别
dockerCLI
根本原因:Docker Desktop 并未向该发行版的 /etc/wsl.conf 注入环境变量,也未挂载 /var/run/docker.sock 的 Unix 域套接字路径。
如何精准启用指定发行版的集成
必须在 Docker Desktop 设置界面中显式勾选,不能靠命令行或配置文件绕过 UI 控制。
- 打开 Docker Desktop → Settings → Resources → WSL Integration
- 确保顶部
Enable integration with my default WSL distro已勾选(否则默认发行版也不生效) - 向下滚动,在 “Additional distributions” 列表中找到你要启用的发行版名称(如
openEuler-24.03、Debian、Ubuntu-24.04) - 单独勾选对应条目(支持多选)
- 点击
Apply & Restart—— 注意:这不是热重载,必须重启 Docker Desktop 才生效
验证方式:在目标发行版终端中运行 ls /mnt/wslg/docker-desktop-data,若目录存在且可读,说明集成已就绪;再执行 docker ps -q 应返回空行(非错误)。
集成后 docker 命令实际怎么工作的
Docker Desktop 并没有把 docker CLI 二进制复制进每个发行版,而是通过 WSL 的跨发行版挂载机制,把 docker-desktop 发行版中的 socket 和 CLI 路径映射进来。
-
dockerCLI 实际位于/usr/bin/docker,由 Docker Desktop 自动注入到 PATH - 所有请求都转发到
/var/run/docker.sock,该路径被软链接到/mnt/wslg/docker-desktop-data/docker.sock - 因此,不同发行版共享同一个 Docker 引擎实例(即
docker-desktop发行版里的服务) - 不支持为不同发行版配置独立的
DOCKER_HOST,硬改会断连
性能影响几乎为零,但要注意:如果某发行版启用了 systemd(如通过 wsl --update --webui 启用),可能因 init 冲突导致 socket 挂载失败,此时需关闭该发行版的 systemd 支持。
容易被忽略的关键点
集成开关本身不解决发行版内部权限问题。即使勾选了,仍可能遇到 Permission denied while trying to connect to the Docker daemon。
- 检查该发行版是否以普通用户身份运行(非 root)—— Docker Desktop 集成默认只对默认用户生效
- 确认该发行版的默认用户是否在
docker用户组中(Docker Desktop 不自动加组,需手动运行sudo usermod -aG docker $USER并重启终端) - 若发行版是通过
wsl --import导入的(非 Store 安装),其/etc/passwd中用户 UID 可能与 Docker Desktop 期望的不一致,导致 socket 访问被拒 - WSL 发行版名称含空格或特殊字符(如
Ubuntu-22.04 (dev))会导致集成列表中无法识别,应避免使用


















