Windows 11 下正确安装 Docker Desktop 到 D 盘的完整教程

发布于:2025-03-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

Windows 11 在 D 盘正确安装 Docker Desktop 的完整教程

如果已经安装Docker Desktop,请使用windows系统设置中的<卸载>功能卸载掉。

前言

在 Windows 11 上安装 Docker Desktop 时,我们通常希望将其安装到 D 盘 而不是默认的 C 盘,以节省系统盘空间。然而,Docker Desktop 安装时会默认写入 C 盘,而手动修改安装路径后,可能会遇到 环境变量丢失命令无法识别等问题。

本教程将详细介绍如何在 Windows 11 中 正确安装 Docker Desktop 到 D 盘,并确保 VS Code 和 CLI 端都能正确识别 docker 命令。

准备工作

1. 手动创建 Docker 相关目录(⚠️ 这一步非常重要,否则会报错)

在运行安装命令前,手动打开 D 盘,在 Program Files 文件夹内新建一个 Docker 文件夹,并在 Docker 文件夹内再新建一个 data 文件夹。

  • D:\Program Files\Docker:Docker Desktop 的安装目录。
  • D:\Program Files\Docker\data:Docker 用于存储镜像、容器、卷等数据的目录。

注意,一定要严格按照这里的名称建立文件夹!

2. 下载 Docker Desktop 安装程序

从官方链接下载 Docker Desktop 安装程序:点击下载

3. 使用管理员权限打开终端

接下来的所有步骤都需要管理员权限,否则可能会遇到安装失败、权限不足等问题。

  • 打开 CMD(命令提示符)

    1. 按下 Win + S,搜索 cmd
    2. 右键点击 命令提示符,选择 “以管理员身份运行”
  • 打开 PowerShell(某些命令可能需要 PowerShell):

    1. 按下 Win + X,选择 Windows 终端(管理员)Windows PowerShell(管理员)

安装 Docker Desktop 到 D 盘

在管理员 CMD 中,先进入 Docker Desktop Installer.exe 所在的目录

不同浏览器的默认下载目录可能不同,请根据你的情况进入正确的路径:

  • 比如我是:Google Chrome 下载路径
    cd D:\Chrome Download
    

然后执行以下安装命令(确保在 CMD 中运行):

start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="D:\Program Files\Docker" --wsl-default-data-root="D:\Program Files\Docker\data" --windows-containers-default-data-root="D:\\Program Files\\Docker"

命令参数解释

  • --installation-dir="D:\Program Files\Docker":指定 Docker Desktop 的安装目录。
  • --wsl-default-data-root="D:\Program Files\Docker\data":指定 WSL 存储 Docker 数据的目录。
  • --windows-containers-default-data-root="D:\\Program Files\\Docker":双斜杠用于 Windows 容器存储路径。

安装完成后,在 管理员 CMD 中执行以下命令检查 Docker 是否安装成功:

docker version

如果报错:

'docker' 不是内部或外部命令,也不是可运行的程序或批处理文件。

说明环境变量没设置好:

原因:Docker 安装后,PATH 变量未正确更新,或者被 setx 截断(Windows 限制 setx 设置的环境变量最大长度为 1024 字符)。

解决方法

使用 PowerShell 安全更新 PATH 变量

Windows setx 命令有 1024 字符限制,我们可以改用 PowerShell 安全更新 PATH

$oldPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
$newPath = $oldPath + ";D:\Program Files\Docker\resources\bin"
[System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::Machine)

然后 重启电脑,再测试:

docker version

若成功,则会打印:

C:\Windows\System32>docker version
Client:
 Version:           27.5.1
 API version:       1.47
 Go version:        go1.22.11
 Git commit:        9f9e405
 Built:             Wed Jan 22 13:41:44 2025
 OS/Arch:           windows/amd64
 Context:           desktop-linux
 ...(以下省略哈)

若失败,则会打印:

C:\Windows\System32>docker version
Client:
 Version:           27.5.1
 API version:       1.47
 Go version:        go1.22.11
 Git commit:        9f9e405
 Built:             Wed Jan 22 13:41:44 2025
 OS/Arch:           windows/amd64
 Context:           desktop-linux
error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.47/version": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.

失败的原因在于:Docker没有运行

解决方案: 确保 Docker 运行

右键管理员运行Docker Desktop(也就是你桌面的Docker快捷方式)

然后 等待 1~2 分钟,再运行:

docker version

最终测试:Docker 是否正常运行

管理员 CMD 运行一个测试容器,确保 Docker 能正常拉取和运行容器:

docker run hello-world

由于网络原因,一般要多试几次,三四次吧,看我这里前两次的输出,第一次是网络问题没打印成功:

C:\Windows\System32>docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: failed to resolve reference "docker.io/library/hello-world:latest": failed to authorize: failed to fetch oauth token: Post "https://auth.docker.io/token": net/http: TLS handshake timeout.
See 'docker run --help'.

C:\Windows\System32>docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Download complete
Digest: sha256:bfbb0cc14f13f9ed1ae86abc2b9f11181dc50d779807ed3a3c5e55a6936dbdd5
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

所以,最后如果输出:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...(以下这里我省略哈)

说明 Docker 一切正常 🎉!