
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用下面的命令转成 2wsl --set-version Ubuntu 22.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 RestartDocker 会自动把现有的数据迁移过去。这个过程可能需要几分钟取决于你已有的镜像和容器数量。注意迁移过程中不要强制关闭 Docker Desktop否则可能导致数据损坏。如果数据量很大建议先清理掉不用的镜像和容器再迁移。3.3 手动迁移 WSL 发行版的完整流程如果你想把docker-desktop和docker-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 和 WSLwsl --shutdown然后用 diskpart 工具压缩diskpart select vdisk fileD:\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 镜像拉取超时的排查顺序遇到拉取超时按这个顺序排查先确认镜像源配置是否生效docker info看Registry Mirrors那一行用curl测试镜像源地址是否可达换一个镜像源再试检查是不是镜像名写错了比如把nginx写成了ngnix如果是私有仓库确认网络能通且认证信息正确5.5 Docker Desktop 更新后配置丢失Docker Desktop 每次大版本更新后有时候会重置 Docker Engine 的配置文件导致你之前配的镜像源没了。所以每次更新完第一件事就是去 Settings 里检查一下镜像源还在不在。我一般会把配置文件备份一份丢了直接粘贴回去。6. 装完之后值得做的几项调优Docker 能跑起来只是第一步让它跑得舒服还需要做一些调整。6.1 限制 WSL2 的内存占用WSL2 默认会占用最多你系统一半的内存如果你机器内存不大Docker 一跑起来可能整个系统都卡。可以在用户目录下创建一个.wslconfig文件来限制[wsl2] memory4GB processors2 swap2GB这个文件放在C:\Users\你的用户名\.wslconfig改完执行wsl --shutdown重启 WSL 生效。内存给多少取决于你的总内存一般 8G 内存的机器给 4G16G 的给 6-8G 比较合适。6.2 配置国内 npm、pip 等镜像源如果你在容器里或者 WSL 里经常用 npm、pip也可以顺手把它们的镜像源配了。npm 的npm config set registry https://registry.npmmirror.compip 的pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这些配置在构建镜像的时候特别有用能显著加快依赖安装速度。6.3 定期清理无用资源Docker 用久了会积累大量无用镜像、停止的容器、悬空卷和构建缓存。定期执行下面的命令清理docker system prune -a --volumes这个命令会删除所有未使用的镜像、容器、网络和卷。执行前确认没有你需要保留的东西。如果想更精细地清理可以分开执行docker image prune、docker container prune、docker 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-desktop和docker-desktop-data到目标盘再安装 Docker Desktop。这样 Docker Desktop 第一次启动时就会直接使用你指定位置的发行版。如果你已经用了一段时间数据比较多迁移前一定要先备份。导出的 tar 文件就是最好的备份万一导入失败还能用备份恢复。迁移过程中保持耐心不要中途强制关机。另外要提醒的是不同版本的 Docker Desktop 在路径设置上的界面和选项位置可能略有不同但核心逻辑是一样的——找到磁盘镜像位置设置改到非系统盘。如果图形界面找不到就用手动导入导出的方式这个方法是通用的不依赖具体版本。最后说一个我自己的习惯我会把 Docker 的数据目录、WSL 备份文件、配置文件都放在同一个盘的不同文件夹里结构清晰方便管理和备份。比如D:\Docker\data放数据D:\Docker\backup放备份D:\Docker\config放配置文件。这样哪天要迁移或者重装直接整个D:\Docker目录打包带走就行。