Docker Desktop 启动成功不等于终端能调用 docker 命令,因 CLI 未加入 shell 的 $PATH;需确认 docker.exe 路径(如 %LOCALAPPDATA%\Docker\cli-tools)是否在 PATH 中,并针对 PowerShell、Git Bash 或 WSL2 分别配置环境变量或安装 Linux 版 CLI。

不是 Docker Desktop 没装好,而是你正在用的 shell 根本没加载到 docker 命令 —— 它压根不在你的 $PATH 里。
为什么 docker --version 报 command not found,但 Docker Desktop 明明在运行?
Docker Desktop 启动成功 ≠ 终端能直接调用 docker CLI。它俩是两件事:前者是图形界面 + WSL2 后端服务,后者是 Windows 主机上一个可执行文件(通常由 Desktop 自动安装并软链)。常见断点有三个:docker.exe 文件确实没放对位置;PATH 没包含它的目录;或者你用的是 PowerShell / Git Bash / WSL2 Ubuntu 等不同 shell,它们的 PATH 不互通。
- 检查
docker.exe是否存在:ls "$env:LOCALAPPDATA\Docker\cli-tools\docker.exe"(PowerShell)或dir "%LOCALAPPDATA%\Docker\cli-tools\docker.exe"(CMD) - 确认该路径是否在
$env:PATH中:$env:PATH -split ';' | Select-String cli-tools - 若不存在,手动加进去:
$env:PATH += ";$env:LOCALAPPDATA\Docker\cli-tools",然后写入$PROFILE持久化 - Git Bash 用户注意:
%LOCALAPPDATA%在 Bash 里不可见,得用/c/Users/xxx/AppData/Local/Docker/cli-tools格式,并确保export PATH="/c/Users/xxx/AppData/Local/Docker/cli-tools:$PATH"写进~/.bashrc
WSL2 终端里也报 command not found?那是另一个环境
你在 WSL2 里执行 docker,走的是 Linux 子系统自己的 PATH 和二进制,和 Windows 主机上的 docker.exe 完全无关。Docker Desktop 默认不往 WSL2 发行版里装 CLI,只暴露 socket 接口。所以 WSL2 里想用 docker 命令,必须单独安装:
- 先确认你当前在哪个发行版:
wsl -l -v,重点看docker-desktop-data和你日常用的(如Ubuntu-22.04)是否分离 - 不要在
docker-desktop里装 CLI —— 它是 Docker Desktop 私有运行时,改了可能崩 - 在你主用的发行版(比如
Ubuntu-22.04)中执行:sudo apt update && sudo apt install docker.io(注意是docker.io,不是docker-ce,后者需额外源) - 装完后仍需把当前用户加进
docker组:sudo usermod -aG docker $USER,然后exec su -l $USER刷新组权限
docker 命令存在但连不上 daemon?别被 command not found 迷惑
有时候 which docker 或 Get-Command docker 能返回路径,但 docker info 报错 “Cannot connect to the Docker daemon”,这说明命令找到了,只是后端没通。此时不是 PATH 问题,而是:
- Docker Desktop 服务根本没跑起来 —— 托盘图标灰色或显示 “Stopped”;右键 → Restart 尝试恢复
- WSL2 后端卡住:
wsl --status应显示Default Version: 2,且wsl -l -v中docker-desktop状态为Running;否则先wsl --shutdown再重启 Desktop - Windows 防火墙或杀毒软件拦截了
com.docker.service的本地通信(尤其 Avast、McAfee),临时禁用测试 - 旧版残留导致 socket 冲突:删掉
%LOCALAPPDATA%\Docker\wsl\data\下的docker-desktop-data虚拟磁盘(会清空镜像和容器,慎用)
最常被忽略的一点:Docker Desktop 安装后默认只向 Windows Terminal / CMD / PowerShell 注册 PATH,如果你用 VS Code 集成终端、ConEmu、或是刚开的 WSL2 窗口,它不会自动继承新 PATH —— 必须关掉再重开,或手动 source 配置。别信“我已经装好了”,先验证 shell 环境本身是否真看见了那个二进制。











