Windows 上安装 Docker 并修改默认安装路径与镜像源配置的完整指南
2026/9/20 11:43:35 网站建设 项目流程

Docker 在 Windows 上的安装,看起来就是下载一个安装包、双击、下一步的事,但真正动手做过的人都知道,这里面的门道比想象中多得多。尤其是当你的系统盘只有可怜的一两百个 G,而 Docker 默认把所有镜像、容器、数据卷全塞在C:\Users\你的用户名\AppData\Local\Docker下面时,用不了几天系统盘就飘红了。更别提国内网络环境下拉取镜像那个龟速,不配镜像源基本没法用。

这篇内容就是把我自己在 Windows 上反复装 Docker、迁移数据目录、调优镜像源这一整套流程完整梳理出来。不管你是刚接触容器的新手,还是已经用过一段时间但一直被 C 盘空间困扰的老用户,都能从里面找到可以直接抄作业的步骤。核心关键词就三个:Docker 安装、修改默认安装路径、镜像源配置,围绕这三个点,我会把每一步为什么这么做、不这么做会怎样、踩过哪些坑,全部讲清楚。

1. 装之前先想清楚:你到底需要哪种 Docker 运行方式

很多人一上来就搜“Docker 安装教程”,然后照着某个博客一顿操作,结果装完发现要么启动不了,要么性能拉胯。问题出在没搞清楚 Windows 上跑 Docker 的几种底层方案。

1.1 Docker Desktop + WSL2 后端:目前最推荐的主流方案

Windows 上跑 Docker 本质上是在跑一个 Linux 虚拟机,因为容器技术依赖 Linux 内核的 namespace 和 cgroup 特性。Docker Desktop 提供了两种后端:一种是基于 Hyper-V 的传统方式,另一种是基于 WSL2 的方式。现在官方主推的是 WSL2 后端,原因很直接——WSL2 本身就是一个轻量级虚拟机,启动快、内存占用低、文件系统性能好,而且和 Windows 的互操作性做得越来越成熟。

用 WSL2 后端的好处是,你的 Docker 引擎实际跑在一个叫docker-desktop的 WSL 发行版里,镜像和容器数据都存放在这个发行版的虚拟磁盘文件里。这个虚拟磁盘文件默认位置同样在 C 盘,所以后面要改路径,改的其实就是这个虚拟磁盘的位置。

1.2 为什么我不建议用 Hyper-V 后端

Hyper-V 后端是早期 Docker Desktop 的默认选项,但它的缺点很明显:需要 Windows 专业版或企业版才能开启 Hyper-V,家庭版用户直接被拒之门外;启动一个完整的 Hyper-V 虚拟机比 WSL2 重得多,内存占用经常飙到 2G 以上;而且 Hyper-V 和某些虚拟化软件(比如 VMware、VirtualBox)存在冲突,开了 Hyper-V 之后那些软件可能就跑不起来了。所以除非你有特殊需求,否则一律选 WSL2。

1.3 系统要求自查清单

在动手之前,先确认你的机器满足以下条件:

检查项要求查看方式
Windows 版本Windows 10 2004 及以上(内部版本 19041+)或 Windows 11winver命令
虚拟化BIOS 中已开启虚拟化任务管理器 → 性能 → CPU → 虚拟化
WSL已安装 WSL2wsl --list --verbose
内存建议 8G 以上任务管理器
磁盘非系统盘预留至少 50G资源管理器

提示:如果你的任务管理器里“虚拟化”显示为“已禁用”,需要重启进 BIOS 开启 Intel VT-x 或 AMD-V,这一步没法在系统里软开。

2. 把 WSL2 这个地基打牢,不然后面全是坑

Docker Desktop 的 WSL2 后端依赖 WSL2 本身,所以 WSL2 没装好或者版本太老,Docker 装完也起不来。这一步很多人会跳过,结果后面报一堆莫名其妙的错。

2.1 一条命令搞定 WSL 安装

在 Windows 11 或者较新的 Windows 10 上,直接用管理员权限打开 PowerShell,执行:

wsl --install

这条命令会自动帮你开启“适用于 Linux 的 Windows 子系统”和“虚拟机平台”两个 Windows 功能,然后下载并安装 WSL2 内核更新包,最后还会装一个默认的 Ubuntu 发行版。执行完重启电脑即可。

如果你用的是老版本 Windows 10,可能不支持这条一键命令,那就手动来:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

两条命令执行完重启,然后去下载 WSL2 内核更新包手动安装,再执行wsl --set-default-version 2把默认版本设为 2。

2.2 验证 WSL2 是否就绪

装完之后别急着装 Docker,先验证一下:

wsl --list --verbose

如果输出里能看到类似Ubuntu Running 2这样的信息,说明 WSL2 已经正常工作。如果 VERSION 那一列显示的是 1,用下面的命令转成 2:

wsl --set-version Ubuntu 2

2.3 WSL 虚拟磁盘的默认位置问题

这里要提前说一个关键点:WSL2 每个发行版都会生成一个ext4.vhdx虚拟磁盘文件,默认放在C:\Users\你的用户名\AppData\Local\Packages\下面那一长串带随机字符的目录里。这个文件会随着你使用不断膨胀,而且 WSL 的虚拟磁盘有个特点——它只增不减,你删了文件它也不会自动缩小。所以如果你打算长期用 Docker,最好从一开始就把 WSL 发行版装到非系统盘,或者装完之后迁移过去。

迁移的方法在下一节详细讲,这里先记住这个事。

3. 安装 Docker Desktop 并把它请出 C 盘

终于到正题了。Docker Desktop 的安装本身不复杂,复杂的是怎么把它的数据目录挪走。

3.1 下载与安装

去 Docker 官网下载 Docker Desktop for Windows 的安装包。国内下载速度可能比较慢,如果实在下不动,可以找一些国内镜像站点的安装包,但要注意校验文件完整性,别装到来路不明的版本。

下载完双击安装,安装向导里有一个选项叫“Use WSL 2 instead of Hyper-V”,确保勾上。安装完成后不要立即启动,先做下面的路径迁移。

3.2 修改 Docker Desktop 磁盘镜像位置

Docker Desktop 从 4.x 版本开始,在设置里直接提供了修改磁盘镜像位置的选项。打开 Docker Desktop,进入Settings → Resources → Advanced,你会看到一个Disk image location的路径,默认是:

C:\Users\你的用户名\AppData\Local\Docker\wsl

点右边的 Browse 按钮,选一个非系统盘的目标目录,比如D:\Docker\data。选好之后点 Apply & Restart,Docker 会自动把现有的数据迁移过去。这个过程可能需要几分钟,取决于你已有的镜像和容器数量。

注意:迁移过程中不要强制关闭 Docker Desktop,否则可能导致数据损坏。如果数据量很大,建议先清理掉不用的镜像和容器再迁移。

3.3 手动迁移 WSL 发行版的完整流程

如果你想把docker-desktopdocker-desktop-data这两个 WSL 发行版也挪到非系统盘,或者你用的是旧版 Docker Desktop 没有图形化迁移选项,那就得手动操作。步骤如下:

先关闭 Docker Desktop,然后在 PowerShell 里执行:

wsl --shutdown

确认所有 WSL 实例都停了之后,导出两个发行版:

wsl --export docker-desktop D:\wsl-backup\docker-desktop.tar wsl --export docker-desktop-data D:\wsl-backup\docker-desktop-data.tar

导出完成后注销原来的发行版:

wsl --unregister docker-desktop wsl --unregister docker-desktop-data

然后从备份文件重新导入到新位置:

wsl --import docker-desktop D:\Docker\wsl\docker-desktop D:\wsl-backup\docker-desktop.tar --version 2 wsl --import docker-desktop-data D:\Docker\wsl\docker-desktop-data D:\wsl-backup\docker-desktop-data.tar --version 2

导入完成后重新启动 Docker Desktop,它会自动识别新的发行版位置。这时候你再去 C 盘看,原来的目录应该已经空了。

3.4 迁移后必做的验证

迁移完别以为就完事了,一定要验证:

docker info

看输出里的Docker Root Dir是不是指向了新的位置。再随便跑一个容器测试:

docker run --rm hello-world

如果能正常输出,说明迁移成功。另外去新目录下看看ext4.vhdx文件是不是在那里,文件大小是否在增长。

4. 镜像源配置:不配这个基本没法用

Docker 装好了,路径也改好了,但如果你直接docker pull一个镜像,大概率会卡在那里半天不动,最后超时。这不是你的问题,是国内网络环境的问题。解决办法就是配置国内镜像源。

4.1 Docker Desktop 图形化配置镜像源

打开 Docker Desktop,进入Settings → Docker Engine,你会看到一个 JSON 配置文件。在里面加上registry-mirrors字段:

{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }

改完点 Apply & Restart。这里要注意 JSON 格式必须正确,多一个逗号少一个引号都会导致 Docker 起不来。

4.2 镜像源的选择与测速

国内可用的镜像源不少,但质量参差不齐,而且有些会时不时挂掉。我一般会准备三到四个,按顺序配置,Docker 会依次尝试。常用的有:

镜像源地址特点
中科大https://docker.mirrors.ustc.edu.cn稳定,更新及时
网易https://hub-mirror.c.163.com老牌,速度尚可
百度云https://mirror.baidubce.com速度不错
阿里云https://你的ID.mirror.aliyuncs.com需要登录阿里云获取专属地址

阿里云的镜像源需要你登录阿里云容器镜像服务控制台,在“镜像加速器”页面获取一个专属地址,这个地址是带你的账号 ID 的,速度通常比公共镜像源更快更稳定。

4.3 配置完镜像源还是拉不动怎么办

有时候镜像源配了,但拉取特定镜像还是失败。这种情况通常是那个镜像在镜像源里没有缓存。解决办法有两个:一是换一个镜像源试试,二是直接用镜像的完整地址从其他仓库拉。比如有些镜像在 Docker Hub 上没有,但在 GitHub Container Registry 上有,那就用ghcr.io/xxx/yyy这样的完整路径拉。

还有一个技巧是配置insecure-registries,如果你有内网私有仓库且没配 HTTPS 证书,需要在这里加上地址,否则 Docker 会拒绝连接。

5. 那些装完才发现的坑和对应的解法

前面讲的都是顺利情况下的流程,但实际操作中总会遇到各种意外。这一节把我遇到过的问题和解决办法列出来,你遇到了可以直接对照。

5.1 Docker Desktop 启动报“Virtualization support not detected”

这个错误出现的原因通常是 BIOS 里虚拟化没开,或者开了但被其他软件占用了。先确认任务管理器里虚拟化是“已启用”。如果已启用还报这个错,检查是不是装了 VMware 或者 VirtualBox,它们可能和 WSL2 冲突。解决办法是关掉那些软件的虚拟化加速功能,或者干脆卸载。

还有一种情况是 Windows 的“虚拟机平台”功能没开。用管理员 PowerShell 执行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然后重启。

5.2 WSL2 虚拟磁盘越用越大,怎么瘦身

前面说过 WSL 的虚拟磁盘只增不减。如果你删了很多镜像和容器,但ext4.vhdx文件还是那么大,可以手动压缩。先关闭 Docker 和 WSL:

wsl --shutdown

然后用 diskpart 工具压缩:

diskpart select vdisk file="D:\Docker\wsl\docker-desktop-data\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit

压缩完成后重新启动 Docker,磁盘文件应该会小很多。这个操作我建议每隔一两个月做一次,尤其是经常拉取和删除大镜像的用户。

5.3 在 WSL 里直接用 Docker 命令

装完 Docker Desktop 后,你可以在 WSL 的 Ubuntu 里直接使用docker命令,因为 Docker Desktop 会自动把 Docker CLI 注入到 WSL 发行版里。但有时候你会发现 WSL 里docker命令找不到,这是因为 Docker Desktop 的 WSL 集成没开启。去Settings → Resources → WSL Integration,把你用的发行版开关打开即可。

5.4 镜像拉取超时的排查顺序

遇到拉取超时,按这个顺序排查:

  1. 先确认镜像源配置是否生效:docker infoRegistry Mirrors那一行
  2. curl测试镜像源地址是否可达
  3. 换一个镜像源再试
  4. 检查是不是镜像名写错了,比如把nginx写成了ngnix
  5. 如果是私有仓库,确认网络能通且认证信息正确

5.5 Docker Desktop 更新后配置丢失

Docker Desktop 每次大版本更新后,有时候会重置 Docker Engine 的配置文件,导致你之前配的镜像源没了。所以每次更新完,第一件事就是去 Settings 里检查一下镜像源还在不在。我一般会把配置文件备份一份,丢了直接粘贴回去。

6. 装完之后值得做的几项调优

Docker 能跑起来只是第一步,让它跑得舒服还需要做一些调整。

6.1 限制 WSL2 的内存占用

WSL2 默认会占用最多你系统一半的内存,如果你机器内存不大,Docker 一跑起来可能整个系统都卡。可以在用户目录下创建一个.wslconfig文件来限制:

[wsl2] memory=4GB processors=2 swap=2GB

这个文件放在C:\Users\你的用户名\.wslconfig,改完执行wsl --shutdown重启 WSL 生效。内存给多少取决于你的总内存,一般 8G 内存的机器给 4G,16G 的给 6-8G 比较合适。

6.2 配置国内 npm、pip 等镜像源

如果你在容器里或者 WSL 里经常用 npm、pip,也可以顺手把它们的镜像源配了。npm 的:

npm config set registry https://registry.npmmirror.com

pip 的:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

这些配置在构建镜像的时候特别有用,能显著加快依赖安装速度。

6.3 定期清理无用资源

Docker 用久了会积累大量无用镜像、停止的容器、悬空卷和构建缓存。定期执行下面的命令清理:

docker system prune -a --volumes

这个命令会删除所有未使用的镜像、容器、网络和卷。执行前确认没有你需要保留的东西。如果想更精细地清理,可以分开执行docker image prunedocker container prunedocker volume prune

注意:docker system prune -a会删除所有没有被运行中容器使用的镜像,包括你手动拉取的但暂时没用的镜像。执行前想清楚。

6.4 把常用操作做成脚本

如果你经常需要重建环境,可以把安装和配置过程写成一个 PowerShell 脚本,下次换机器直接跑一遍。脚本里包括开启 WSL 功能、安装 WSL2、导入发行版到指定目录、配置镜像源这些步骤。这样能省下大量重复劳动。

7. 关于路径修改这件事,再多说几句

修改 Docker 默认安装路径这件事,表面上看只是改个目录,但背后涉及 WSL 发行版的导入导出、虚拟磁盘的迁移、Docker Desktop 配置的更新这几个环节,任何一个环节出问题都可能导致 Docker 起不来或者数据丢失。

我的建议是,如果你是新装 Docker,最好在第一次启动 Docker Desktop 之前就把 WSL 发行版的位置规划好。因为这时候还没有数据,迁移成本最低。具体做法是先用wsl --install装好 WSL2,然后手动导入docker-desktopdocker-desktop-data到目标盘,再安装 Docker Desktop。这样 Docker Desktop 第一次启动时就会直接使用你指定位置的发行版。

如果你已经用了一段时间,数据比较多,迁移前一定要先备份。导出的 tar 文件就是最好的备份,万一导入失败还能用备份恢复。迁移过程中保持耐心,不要中途强制关机。

另外要提醒的是,不同版本的 Docker Desktop 在路径设置上的界面和选项位置可能略有不同,但核心逻辑是一样的——找到磁盘镜像位置设置,改到非系统盘。如果图形界面找不到,就用手动导入导出的方式,这个方法是通用的,不依赖具体版本。

最后说一个我自己的习惯:我会把 Docker 的数据目录、WSL 备份文件、配置文件都放在同一个盘的不同文件夹里,结构清晰,方便管理和备份。比如D:\Docker\data放数据,D:\Docker\backup放备份,D:\Docker\config放配置文件。这样哪天要迁移或者重装,直接整个D:\Docker目录打包带走就行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询