根本原因是Docker Desktop未将CLI注入当前WSL发行版PATH,需在Settings→Resources→WSL Integration中勾选默认及当前发行版并点Apply & Restart,同时确认wsl --list输出名称与设置页完全一致。

WSL里执行docker报“command not found”根本原因
不是没装,也不是路径错——而是 Docker Desktop 根本没把 CLI 注入到当前 WSL 发行版的 PATH 中。WSL 本身不自带 docker 命令,它依赖 Docker Desktop 在启动时自动挂载一个轻量 CLI(实际是 Windows 上 docker.exe 的代理),这个过程只在 WSL 集成启用且目标发行版被显式勾选后才触发。
检查 Docker Desktop 的 WSL 集成是否真正生效
打开 Docker Desktop → Settings → Resources → WSL Integration,确认两件事:
- ✅ “Enable integration with my default WSL distro” 已勾选(注意:这里指系统默认发行版,不是你当前正在用的那个)
- ✅ 你当前使用的发行版(比如
Ubuntu-20.04)必须出现在下方 “Enable integration with additional distros” 列表中,并且其复选框已被手动勾选 - ❌ 如果列表为空或显示 “You don’t have any WSL 2 distros installed”,说明 WSL2 没被识别到,先运行
wsl --list --verbose确认状态;若版本显示为1,需执行wsl --set-version Ubuntu-20.04 2 - ⚠️ 勾选完务必点 “Apply & Restart”,否则配置不落地
docker 命令存在但不可用:PATH 和 socket 路径双校验
即使集成已启用,仍可能因环境变量或通信通道失效导致命令失败:
- 运行
echo $PATH,确认输出中包含/usr/bin(Docker Desktop 注入的 CLI 就放在这里);若无,重启 WSL 终端或手动执行source ~/.bashrc - 运行
ls -l /usr/bin/docker,应看到软链接指向/mnt/wsl/docker-desktop/cli-tools/docker;若链接损坏或不存在,说明集成未完成,重进 Docker Desktop 设置页重新 Apply - 运行
echo $DOCKER_HOST,正常应为空(Docker Desktop 使用 Unix socket 通信);若被设为tcp://localhost:2375,反而会干扰本地 socket 连接,删掉~/.bashrc里相关 export 行 - 验证 socket 是否可达:
ls /run/docker.sock应返回文件路径;若提示 “No such file or directory”,说明 Docker Desktop 后端服务未就绪,检查 Windows 服务Docker Desktop Service是否运行中
WSL2 内核或发行版异常导致 CLI 挂载失败
这类问题不报错,但 docker 命令就是不出现,常见于以下场景:
- 你手动替换了 WSL2 内核(如自编译 kernel),Docker Desktop 会拒绝挂载 CLI,因为内核 ABI 兼容性无法保证——此时只能换回官方内核
wsl_update_x64.msi - 发行版损坏或注册信息错乱:运行
wsl --unregister Ubuntu-20.04后重装,再重新开启集成 - Docker Desktop 数据目录损坏(尤其
docker-desktop-data分发版出错):以管理员身份运行wsl --unregister docker-desktop-data和wsl --unregister docker-desktop,再重启 Docker Desktop - Windows 用户账户控制(UAC)拦截了 WSL 集成初始化:确保 Docker Desktop 是以普通用户(非管理员)身份启动的;若曾用管理员运行过,残留权限可能导致挂载失败
最常被忽略的一点:WSL 发行版名称区分大小写,wsl --set-default ubuntu-20.04 和 wsl --set-default Ubuntu-20.04 是两个不同名字,Docker Desktop 设置页里勾选的必须和 wsl --list 输出的**完全一致**。











