Docker Desktop UI版本(如4.x)与docker version显示的server版本(如24.x)不一致是正常现象,因二者独立演进;关键应关注server引擎版本及CLI是否正确连接到Desktop的daemon socket。

docker --version 和 Docker Desktop 设置页显示的版本号不一致
这是常见现象,不是 bug。Docker Desktop 客户端(docker CLI)和后台守护进程(dockerd)可以独立升级,而 WSL 中的 CLI 可能来自 WSL 发行版自带的包管理器(如 apt install docker.io),而非 Docker Desktop 自带的二进制。
验证方式:运行 which docker,如果输出是 /usr/bin/docker,说明你用的是 Ubuntu/Debian 自带的旧版;Docker Desktop 推荐使用它自带的 /mnt/wsl/docker-desktop/cli-tools/docker(软链通常已建在 /usr/bin/docker,但可能被覆盖)。
- 临时修复:直接调用 Docker Desktop 提供的 CLI:
/mnt/wsl/docker-desktop/cli-tools/docker --version - 永久修复:删掉系统自带的 CLI:
sudo apt remove docker.io,再确认which docker指向/usr/bin/docker且是符号链接到 WSL 的 cli-tools 目录 - 重启 WSL:执行
wsl --shutdown后重新打开终端,避免旧进程缓存
Windows 上 Docker Desktop 显示 4.x,但 WSL 里 docker version 显示 server 是 24.x
客户端和服务端版本号本来就不要求一致。Docker CLI 向后兼容约 2 个大版本,只要 server 版本 ≥ client 版本(或 client 版本 ≤ server +2),功能基本可用。Docker Desktop 4.x 是 UI 应用版本号,与内部集成的 dockerd(如 24.0.7)无直接对应关系。
关键看 docker version 输出中的 Server: Engine 部分 —— 这才是真正跑容器的版本,也是你应该关注的。
-
Client版本由 WSL 中的docker命令决定,可单独更新(见上一节) -
Server版本由 Docker Desktop 控制,WSL 中无法手动升级,必须通过 Windows 端更新 Docker Desktop - 若
Client版本远低于Server(如 client 20.x / server 25.x),部分新 flag(如--platform默认行为变更)可能不识别,但不会报错,只是静默忽略
如何确认当前 CLI 真正连接的是 Docker Desktop 的 daemon 而非本地 buildx 或 rootless 实例
WSL 默认会自动连接 Docker Desktop 的 daemon(通过 DOCKER_HOST=unix:///run/desktop/docker.sock),但如果你手动配置过 DOCKER_HOST、装过 buildx standalone、或启用过 rootless mode,就可能连错。
Docker Hub (hub.docker.com)。此技能适用于所有 Docker Hub 操作,包括读取、创建、更新和删除数据。只要任务涉及 Docker Hub,就使用此技能。
最直接的判断方式是检查 socket 路径和上下文:
- 运行
echo $DOCKER_HOST—— 正常应为空(Docker Desktop 自动注入)或为unix:///run/desktop/docker.sock - 运行
docker context ls—— 当前激活的 context 名应为desktop-linux(不是default或rootless) - 运行
ls -l /run/desktop/—— 应能看到docker.sock,且属主是root:docker - 如果看到
/var/run/docker.sock有内容,说明你连到了本地自启的 dockerd(比如用sudo service docker start启的),需停掉:sudo service docker stop并禁用:sudo systemctl disable docker
Docker Desktop 更新后 WSL 里仍显示旧版本号
本质是 WSL 的 PATH 缓存或 shell 初始化未重载导致的路径未刷新。Docker Desktop 更新时会替换 /mnt/wsl/docker-desktop/cli-tools/ 下的二进制,但你的 shell 可能还记着旧的 hash 或软链目标。
- 先执行
hash -d docker(清除 bash/zsh 对docker的路径缓存) - 再检查软链目标:
readlink -f $(which docker),确认指向/mnt/wsl/docker-desktop/cli-tools/docker - 如果软链损坏(如指向不存在路径),手动重建:
sudo ln -sf /mnt/wsl/docker-desktop/cli-tools/docker /usr/bin/docker - 某些发行版(如 Ubuntu 22.04+)默认启用
systemd,需确保docker-desktop服务已在 WSL 启动:sudo service docker-desktop status,若未运行则sudo service docker-desktop start
真正容易被忽略的是:WSL 中的 docker 命令是否真的在用 Docker Desktop 的 socket,而不是某个残留的本地 daemon 或错误 context —— 这比版本号差异更影响实际使用。










