当前位置: 首页 > article >正文

【Docker】解放C盘空间:在Win10上利用WSL2迁移Docker镜像存储路径实战

1. 为什么需要迁移Docker镜像存储路径很多Windows 10用户在使用Docker进行开发时都会遇到一个头疼的问题C盘空间莫名其妙就被占满了。我自己就曾经遇到过这种情况明明没装多少软件C盘却显示只剩下几个GB的空间。后来发现罪魁祸首竟然是Docker的镜像文件。Docker Desktop默认会把所有镜像、容器和卷数据存储在C盘的用户目录下路径通常是C:\Users\你的用户名\AppData\Local\Docker\wsl\data\ext4.vhdx。这个vhdx文件会随着使用不断膨胀特别是当你拉取多个大型镜像或者创建多个容器后很容易就会占用几十GB的空间。更麻烦的是这个文件的大小不会自动缩减。即使你删除了镜像和容器vhdx文件占用的空间也不会自动释放。我曾经删除过所有镜像后发现这个文件还是占用了20多GB的空间。对于SSD容量不大的笔记本来说这简直就是一场灾难。WSL2的出现让这个问题变得更加明显。因为Docker Desktop现在默认使用WSL2作为后端所有的Docker数据实际上都存储在一个虚拟硬盘文件中。虽然WSL2提供了更好的性能和Linux内核兼容性但也带来了这个存储空间管理的问题。2. 迁移前的准备工作在开始迁移之前我们需要做好充分的准备。首先确保你的系统满足以下条件Windows 10版本1903或更高最好是2004或20H2版本已启用WSL2功能已安装Docker Desktop并配置使用WSL2后端要检查WSL版本可以打开PowerShell或命令提示符运行wsl --list -v这个命令会列出所有已安装的WSL发行版及其版本。你应该能看到docker-desktop和docker-desktop-data两个发行版并且版本都是2。接下来我们需要确定当前Docker数据的存储位置和大小。默认情况下数据存储在C:\Users\你的用户名\AppData\Local\Docker\wsl\data\ext4.vhdx你可以右键点击这个文件查看属性了解它占用了多少空间。在我的电脑上这个文件已经占用了超过30GB的空间。选择一个合适的目标位置也很重要。理想的目标磁盘应该有足够的剩余空间至少是当前vhdx文件大小的两倍最好是SSD因为机械硬盘会影响Docker的性能路径中不要包含中文或特殊字符我个人的经验是把Docker数据迁移到D盘或E盘的专门目录下比如D:\docker\wsl。3. 详细迁移步骤现在让我们开始实际的迁移操作。这个过程需要完全关闭Docker Desktop所以请确保没有正在运行的容器或重要工作。第一步导出现有数据首先右键点击系统托盘中的Docker图标选择Quit Docker Desktop完全退出Docker。然后打开PowerShell管理员权限运行以下命令查看WSL状态wsl --list -v确保docker-desktop和docker-desktop-data的状态都是Stopped。如果还在运行可以手动停止wsl --terminate docker-desktop wsl --terminate docker-desktop-data接下来导出docker-desktop-data到临时文件。选择一个有足够空间的位置比如D盘根目录wsl --export docker-desktop-data D:\docker-desktop-data.tar这个过程可能会花费一些时间取决于你的Docker数据量大小。我的30GB数据大约用了15分钟完成导出。第二步注销原有分发导出完成后我们需要注销原来的docker-desktop-data分发wsl --unregister docker-desktop-data执行这个命令后原来的ext4.vhdx文件会被自动删除C盘的空间会立即释放。第三步导入到新位置现在我们把之前导出的数据导入到新的位置。首先创建目标目录比如mkdir D:\docker\wsl然后执行导入命令wsl --import docker-desktop-data D:\docker\wsl D:\docker-desktop-data.tar --version 2这个命令会在新的位置创建docker-desktop-data分发使用我们导出的tar文件作为数据源指定使用WSL2版本导入完成后你可以在D:\docker\wsl目录下看到一个新的ext4.vhdx文件这就是迁移后的Docker数据存储文件。4. 验证迁移结果迁移完成后我们需要验证是否成功。首先重新启动Docker Desktop然后进行以下检查打开PowerShell运行wsl --list -v确认docker-desktop-data的状态是Running并且路径指向新的位置。运行一些基本的Docker命令检查功能是否正常docker version docker info docker run hello-world这些命令应该都能正常执行。检查存储位置原来的C:\Users\你的用户名\AppData\Local\Docker\wsl\data目录应该只剩下很小的元数据文件新的D:\docker\wsl目录下应该有ext4.vhdx文件并且大小与原来的数据相当为了进一步验证你可以尝试拉取一个新的镜像docker pull nginx然后观察新镜像的存储位置。使用docker system df命令查看磁盘使用情况确认新镜像确实存储在新的位置。5. 迁移后的优化与注意事项成功迁移后还有一些优化和注意事项需要考虑定期清理Docker数据即使迁移到了其他磁盘Docker数据仍然会不断增长。建议定期运行以下命令清理无用数据docker system prune -a --volumes这个命令会删除所有停止的容器所有未被任何容器使用的网络所有悬空的镜像所有构建缓存备份重要数据虽然vhdx文件包含了所有Docker数据但最好还是定期备份重要的镜像和容器。可以使用以下命令导出重要容器docker export 容器ID container.tar对于镜像可以使用docker save -o image.tar 镜像名性能考虑如果你使用的是机械硬盘可能会注意到Docker操作比在SSD上慢。特别是对于I/O密集型的操作比如构建镜像或运行数据库容器。如果性能成为问题考虑将Docker数据迁移回SSD如果有足够空间使用.dockerignore文件减少构建上下文大小考虑使用多阶段构建减少最终镜像大小处理常见问题有时候迁移后可能会遇到一些问题比如Docker启动失败尝试重启电脑然后再次启动Docker Desktop网络问题重置Docker网络设置权限问题确保新位置的目录权限正确如果遇到无法解决的问题可以尝试完全卸载Docker Desktop删除所有相关文件然后重新安装并重新导入数据。6. 其他替代方案比较除了使用WSL2迁移方法外其实还有其他几种方式可以解决C盘空间问题我们来简单比较一下方法一符号链接有些人尝试使用mklink创建符号链接把Docker数据目录指向其他磁盘。例如mklink /J C:\Users\你的用户名\AppData\Local\Docker\wsl D:\docker\wsl这种方法理论上可行但我实际测试中发现有时会导致Docker启动失败或数据损坏不太推荐。方法二修改WSL配置文件WSL2允许通过配置文件设置vhdx文件的存储位置。你可以创建一个%USERPROFILE%\.wslconfig文件内容如下[wsl2] kernelC:\\temp\\myCustomKernel memory4GB # 限制内存使用 swap8GB # 限制交换空间 localhostForwardingtrue但是这种方法无法直接改变vhdx文件的存储位置只能调整一些性能参数。方法三使用第三方工具有一些第三方工具如wsl2-utils提供了更便捷的WSL管理功能但对于Docker数据迁移来说官方推荐的方法仍然是最可靠的。经过比较使用WSL的导出/导入功能是最安全、最可靠的方法。虽然步骤稍多但能够保证数据的完整性而且效果立竿见影。7. 深入理解WSL2与Docker的存储机制为了更好地管理Docker存储空间了解一些底层原理很有帮助。WSL2本质上是一个轻量级虚拟机运行着完整的Linux内核。当Docker Desktop使用WSL2后端时实际上是在这个虚拟机中运行Docker引擎。docker-desktop-data分发包含了Docker的所有持久化数据镜像文件容器文件系统卷数据网络配置这些数据都存储在ext4文件系统中而这个文件系统又被封装在Windows上的vhdx虚拟硬盘文件中。这就是为什么我们迁移docker-desktop-data分发就能移动所有Docker数据的原因。WSL2的一个特点是它的动态存储分配。vhdx文件会根据需要自动增长但不会自动缩减。即使删除文件vhdx文件的大小也不会减小。这就是为什么我们需要定期清理Docker数据或者像本文介绍的那样直接迁移到更大的磁盘。理解这个机制后你就能更好地规划Docker的存储使用。例如如果你经常构建大型镜像就应该确保目标磁盘有足够的剩余空间。或者如果你使用Docker运行数据库就应该注意I/O性能问题。

相关文章:

【Docker】解放C盘空间:在Win10上利用WSL2迁移Docker镜像存储路径实战

1. 为什么需要迁移Docker镜像存储路径? 很多Windows 10用户在使用Docker进行开发时都会遇到一个头疼的问题:C盘空间莫名其妙就被占满了。我自己就曾经遇到过这种情况,明明没装多少软件,C盘却显示只剩下几个GB的空间。后来发现罪魁…...

从零组装一台智能避障小车:STM32F103RCT6核心控制板、SG90舵机与HC-SR04超声波模块的软硬件联调全记录

从零构建智能避障小车:STM32F103RCT6核心与多传感器融合实战指南 在创客圈里,智能小车一直是验证嵌入式系统能力的经典项目。当传统的循迹小车已经不能满足你的技术探索欲望时,为它装上"眼睛"和"大脑",打造一…...

别再死磕动态规划了!用Python模拟退火算法搞定背包问题,附完整代码

用Python模拟退火算法优雅解决背包问题:从理论到实战 在算法学习的过程中,背包问题就像一座难以逾越的高山,让无数初学者望而生畏。传统的动态规划解法虽然精确,但代码实现复杂、状态转移方程难以理解,对于实际应用场景…...

从标注到部署:用LabelImg和MaixHub,在K210上跑通你的第一个“汽车识别”模型全流程

从零构建汽车识别模型:LabelImg标注与K210部署实战指南 在智能硬件开发领域,K210芯片以其高效的AI推理能力成为边缘计算的热门选择。本文将带您完整走通一个汽车识别项目的全流程——从数据标注到模型部署。不同于市面上泛泛而谈的教程,我们聚…...

别让Simulink仿真卡成PPT!手把手教你用Solver Profiler揪出‘性能杀手’

别让Simulink仿真卡成PPT!手把手教你用Solver Profiler揪出‘性能杀手’ 当你的Simulink模型从流畅的4K视频变成一帧一帧的PPT时,那种等待仿真的焦灼感就像看着进度条以字节为单位前进。上周我调试一个包含30个Simscape模块的机械臂控制系统时&#xff0…...

Base64编码实战:手把手教你用PHPStudy环境在本地调试图片/PDF内联显示

Base64编码实战:手把手教你用PHPStudy环境在本地调试图片/PDF内联显示 在Web开发中,Base64编码是一种常见的数据处理方式,它可以将二进制数据(如图片、PDF等)转换为可打印的ASCII字符串,从而方便地在HTML中…...

GPT-5.5批量生成的Prompt工程,别再让模糊指令变成Token烧金窟

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

深度解析:如何用League Akari实现英雄联盟对局效率提升300%的实战指南

深度解析:如何用League Akari实现英雄联盟对局效率提升300%的实战指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为每次英…...

终极指南:如何5分钟搞定B站字幕提取与格式转换

终极指南:如何5分钟搞定B站字幕提取与格式转换 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾为保存B站视频中的精彩内容而烦恼?…...

开源AI工具链ClawForge:从本地模型部署到Agent开发的平民化实践

1. 项目概述:从“ClawForge”看开源AI工具链的平民化实践 最近在GitHub上看到一个挺有意思的项目,叫“ClawForge”。光看名字,你可能会联想到“锻造爪子”,有点神秘又带点力量感。实际上,这是一个围绕开源大语言模型&a…...

请教指针初始化:定义指针时,要么直接指向有效内存,要么置为NULL

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

SDR++终极指南:如何快速掌握跨平台软件定义无线电

SDR终极指南:如何快速掌握跨平台软件定义无线电 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus SDR软件定义无线电是一款开源的跨平台SDR软件,以其轻量级架构和直观界…...

一屏融汇虚实 一擎驱动孪生:云边端协同架构赋能,打造城市园区港口通用数字孪生底座

一屏融汇虚实 一擎驱动孪生副标题:云边端协同架构赋能,打造城市园区港口通用数字孪生底座前言随着数字孪生向全域覆盖、多场景复用、高并发承载、实时性联动纵深发展,行业普遍面临场景割裂、架构分散、算力错配、底座不通用等痛点。城市、园区…...

魔方机器人(二)从定点采样到序列生成:OpenCV颜色识别的工程实践

1. 魔方机器人颜色识别的工程挑战 第一次尝试用摄像头识别魔方颜色时,我对着屏幕上闪烁的色块发呆了整整三天。明明肉眼能清晰分辨的红色和橙色,在程序里却总是混淆。这就是魔方机器人开发中最关键的环节——颜色识别的工程化实现,它直接决定…...

3个颠覆性技术突破让百度网盘文件分享效率提升500%

3个颠覆性技术突破让百度网盘文件分享效率提升500% 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否曾经因为百度网盘分享链接频繁失效而不得不重新上…...

厘米级实景复刻 全域化镜像感知:自进化时空标定技术加持,筑牢复杂工况视频孪生运行根基

厘米级实景复刻 全域化镜像感知副标题:自进化时空标定技术加持,筑牢复杂工况视频孪生运行根基前言数字孪生技术规模化落地进程中,实景还原精度不足、全域感知连贯性薄弱、复杂工况适配性差成为制约行业发展的核心瓶颈。传统方案受限于静态标定…...

NTU-RGB+D数据集在PyTorch/GCN中的实战应用:从数据加载到模型训练避坑指南

NTU-RGBD数据集在PyTorch/GCN中的实战应用:从数据加载到模型训练避坑指南 当我们需要构建一个基于骨骼数据的动作识别模型时,NTU-RGBD数据集无疑是最受欢迎的选择之一。这个包含超过56,000个动作样本的大规模数据集,为研究者提供了丰富的训练…...

深度解析VisualCppRedist AIO:3种核心技术实现Windows运行时组件自动化管理

深度解析VisualCppRedist AIO:3种核心技术实现Windows运行时组件自动化管理 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO项目…...

Keil C51开发避坑指南:用指针和_at_关键字精准操作RAM/ROM地址

Keil C51内存操作实战:指针与_at_关键字的深度解析与避坑策略 第一次接触Keil C51的存储空间管理时,我对着编译器的报错信息发呆了整整一个下午——为什么这段在标准C里运行良好的指针代码,在51单片机上却频繁引发硬件异常?直到亲…...

别再为FDC2214数据抖动发愁了!一个接地气的屏蔽线替代方案与差分测量实战

FDC2214抗干扰实战:差分测量与数据稳定化技巧 在电容式传感项目中,FDC2214作为一款高分辨率多通道电容数字转换器,常被用于纸张计数、液位检测等场景。然而实际应用中,工程师们最头疼的莫过于数据抖动问题——导线轻微移动、环境…...

SteamAutoCrack终极指南:如何快速实现游戏免Steam启动的完整教程

SteamAutoCrack终极指南:如何快速实现游戏免Steam启动的完整教程 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款强大的开源工具,专门用于…...

高效解决Visual C++运行库问题的终极方案实战指南

高效解决Visual C运行库问题的终极方案实战指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库缺失或版本冲突是Windows开发者最常见的系统环境问…...

OpenIPC固件构建与君正T31平台刷机实战指南

OpenIPC固件构建与君正T31平台刷机实战指南 【免费下载链接】firmware Alternative IP Camera firmware from an open community 项目地址: https://gitcode.com/gh_mirrors/fir/firmware OpenIPC是一个基于Buildroot的开源IP摄像头固件项目,为海思、君正、全…...

如何快速解锁网易云音乐NCM格式:ncmdumpGUI完整免费解决方案指南

如何快速解锁网易云音乐NCM格式:ncmdumpGUI完整免费解决方案指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样的困扰&…...

Steam游戏自动破解终极指南:3步实现DRM移除与离线游戏

Steam游戏自动破解终极指南:3步实现DRM移除与离线游戏 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款专业的Steam游戏自动破解工具,通过智…...

用Lingo搞定线性规划:一个工厂利润最大化的实例分析与代码逐行解读

用Lingo搞定线性规划:一个工厂利润最大化的实例分析与代码逐行解读 当工厂面临生产计划优化问题时,如何用数学工具找到最佳决策方案?Lingo作为专业的优化建模软件,能够将复杂的生产约束转化为可计算的数学模型。本文将以一个真实的…...

通信行业硅转向:从专用ASIC到软件定义网络的架构演进

1. 项目概述:通信行业的硅转向 如果你在2016年前后关注过通信设备行业,尤其是那些做核心路由器、骨干网交换机的“大厂”,你大概能感受到一种山雨欲来的氛围。当时,一篇来自EE Times的报道,标题是“Silicon Shift Ahea…...

117.YOLOv5/v8数学原理+CSPDarknet架构,CUDA117环境一键部署

摘要 YOLO(You Only Look Once)系列算法是目标检测领域最主流的实时检测框架,其核心思想是将目标检测任务转化为一个端到端的回归问题。 本文从数学原理出发,系统阐述YOLOv5/v8的架构演进与核心机制,并提供一个从数据准备、模型训练到ONNX部署的完整可运行案例。 文章所有…...

别再用filter了!MATLAB bandpass函数一键搞定信号滤波,附音乐合成与降噪实战

别再用filter了!MATLAB bandpass函数一键搞定信号滤波,附音乐合成与降噪实战 信号处理工程师的日常,往往伴随着无数个深夜调试滤波器的痛苦回忆。从设计滤波器系数到手动补偿群延迟,再到反复调整截止频率,传统filter和…...

Win10系统下Rational Rose 2003完整安装与激活指南(含资源与排错)

1. 准备工作:获取安装包与工具 在Win10系统上安装Rational Rose 2003确实是个技术活,我前前后后折腾了三四次才搞定。首先要解决的就是安装包问题,这个老软件现在官方渠道已经很难找到了。建议直接使用百度网盘资源,下载速度相对稳…...