需先执行 wsl --set-default 指定发行版,再重启 docker desktop 并启用 wsl 集成;wsl 中需手动配置 docker cli 路径或符号链接;docker-desktop 和 docker-desktop-data 不可随意卸载;socket 权限、uid 匹配及安全软件拦截是常见故障点。

怎么确认并修改 Docker Desktop 的默认 WSL 发行版
Docker Desktop 的 Enable integration with my default WSL distro 选项不是“自动识别当前用的发行版”,而是严格绑定系统级默认值——这个值由 wsl --set-default 决定,和你日常打开的终端无关。很多人改了 Ubuntu-22.04 的设置却没生效,就是因为没真正设为默认。
- 运行
wsl --list --verbose,确认目标发行版状态是Running且 VERSION 是2 - 执行
wsl --set-default Ubuntu-22.04(把名字换成你实际的发行版名,注意大小写和连字符) - 关闭所有 WSL 窗口,再执行
wsl --shutdown,否则 Docker Desktop 可能仍读取旧缓存 - 重启 Docker Desktop,Settings → WSL Integration 页面里,“Enable integration with my default WSL distro” 开关应自动变绿,且下方不再显示该发行版在 “additional distros” 列表中重复出现
为什么开了默认集成,但 docker 命令在 WSL 终端里还是报 command not found
这不是 Docker Desktop 没集成,而是 WSL 发行版里缺少 docker CLI 的 PATH 或符号链接。Docker Desktop 并不往你的发行版里安装二进制文件,它只通过 Unix socket 暴露服务,CLI 需要你自己配通。
- 检查
/usr/bin/docker是否存在:多数情况下不存在,因为 Docker Desktop 不注入 CLI - 正确做法是启用 WSL 集成后,在 WSL 中运行:
sudo ln -sf /mnt/wslg/distro/docker-desktop/usr/bin/docker /usr/local/bin/docker(路径可能因版本微调,优先查ls /mnt/wslg/下挂载点) - 或更稳妥:直接使用 Windows 宿主机的 CLI,把
C:\Program Files\Docker\Docker\resources\bin加入 WSL 的$PATH(需在~/.bashrc或~/.zshrc中添加export PATH="/mnt/c/Program Files/Docker/Docker/resources/bin:$PATH") - 注意:不要尝试在 WSL 里
apt install docker.io,会与 Docker Desktop 的守护进程冲突,导致docker ps返回空或权限错误
docker-desktop-data 和 docker-desktop 这两个 WSL 发行版能删吗
能删,但删错会导致整个 Docker Desktop 无法启动,且恢复麻烦。它们不是普通发行版,而是 Docker Desktop 自建的专用 WSL 实例:
docker-desktop:运行 Docker Engine 守护进程(dockerd)的轻量发行版,负责容器调度docker-desktop-data:存放镜像、容器层、卷(volumes)等持久化数据,相当于它的“硬盘”不要手动
wsl --unregister这两个发行版,除非你已备份.tar文件并清楚后续导入命令如果想迁移存储位置(比如从 C 盘移到 D 盘),必须按顺序操作:先
wsl --export→wsl --unregister→wsl --import,且--version 2参数不能漏迁移后务必执行
wsl --shutdown,再重启 Docker Desktop,否则它仍尝试连接旧 socket 路径
集成开启后,WSL 里 docker info 显示 Cannot connect to the Docker daemon
这是最典型的“集成开了但没通”的表现,90% 出现在网络层或 socket 权限上:
- 先检查 WSL 中是否能访问 Docker Desktop 的 socket:
ls -l /var/run/docker.sock—— 正常应是软链接指向/mnt/wslg/docker-desktop/docker.sock - 如果链接损坏或指向不存在路径,说明 WSL Integration 没真正加载成功,回到 Settings → WSL Integration 页面,关闭再重开一次开关,然后
wsl --shutdown - 若 socket 存在但权限拒绝,常见于 WSL 发行版 UID 和 Docker Desktop 期望 UID 不一致(尤其用非 root 用户登录时),临时解决:在 WSL 中运行
sudo chmod 666 /var/run/docker.sock(仅调试用,生产环境应配docker组) - 最隐蔽的一点:某些安全软件(如火绒、360)会拦截 WSL 和 Windows 之间的 AF_UNIX socket 通信,禁用实时防护后测试一次即可验证
Docker Desktop 的 WSL 集成不是“一劳永逸”的开关,它依赖 WSL 默认值、socket 挂载、用户权限、安全软件放行四个环节同时成立。任一环节松动,docker 命令就会静默失败,而错误信息往往毫无指向性。











