惊!Docker Desktop竟然不会自动释放磁盘空间,C盘告急!

news/2025/4/1 12:06:48/文章来源:https://www.cnblogs.com/cyxg/p/18800234

Docker Desktop竟然不会自动释放磁盘占用

> > 操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB > > Docker Desktop 版本:v4.34.3 >

1. 缘起

docker pull docker-0.unsee.tech/savatar101/omniparse:0.1 拉取镜像,某个片段卡住,我主动取消了改操作,Ctrl+C。发现磁盘占用10多个G。
本来以为二次pull时,会有缓存,但是发现之前下载好的片段还是在重新下载。

这不就是典型的“既立又婊”么,占用空间了不说,还要重新下载,绝对不能接受。
于是,各种磁盘清理,清空回收站,但都没有鸟用(费玉清:请问女人结婚有什么用?答案是:有鸟用🦜)。Docker Desktop也重启过几次。

问AI怎么回事,按照他的回复清理了镜像啥的。

  • docker image prune -a 删除所有未被容器使用的镜像和悬空的镜像
  • docker container prune 清理停止的容器(慎用,容器我还是要保留的)
  • docker volume prune 删除所有未被容器使用的卷
  • docker system prune -a --volumes 命令清理所有未使用的容器、镜像、网络和数据卷。慎用(幸好没用,不然之前下的image要重新下)

但问题依旧,容器没装成,还百搭了20G SSD空间。想想都不爽。

2. 寻因

直接问的Deepseek(联网模式),提示词问题烂的一笔:windows wls docker pull 非官方镜像没有成功,清理后磁盘没有恢复原来大小。怎么回事

好在AI给出了正确答案,

alt text

原来是因为:👉 Docker Desktop的虚拟磁盘(如ext4.vhdx、docker_data.vhdx)在Windows系统中不会自动缩减空间占用。即使实际使用空间远低于最大值,系统仍会保留虚拟磁盘曾经达到的最大容量

3. 刨根

Docker Desktop基于WSL 2运行,而WSL 2使用vhdx格式的虚拟磁盘文件。这种文件支持自动扩容,但不会自动缩容。即使删除容器或镜像,虚拟磁盘文件仍会保留其最大占用空间,导致磁盘空间未被释放‌

4. 破局

解决办法:

  1. wsl --shutdown 关闭所有WSL,cmd 或 powershell工具都可以
  2. diskpart 打开工具,会自动新开一个cmd窗口
  3. select vdisk file="<you_path>\docker\disk\docker_data.vhdx" 自己环境下Docker Desktop的虚拟磁盘的路径。
  4. compact vdisk 执行压缩,等待进度跑完

结果惊奇的发现,之前被坑的20G不仅回来了,还多出来了28个G,简直不要太棒了。

本来AI工具是基于网页的内容进行综合回答,结果现在还需要AI回复,然后我再写回到网页(发布到的博客园)。AI知识源泉,网页占大头吧,有点“取之于民、用之于民”的味道了。

于是好奇diskpart的作用,查了下可用命令。需要进入diskpart工具的命令环境,输入/?

DISKPART> /?Microsoft DiskPart 版本 10.0.22621.1ACTIVE      - 将选中的分区标记为活动的分区。
ADD         - 将镜像添加到一个简单卷。
ASSIGN      - 给所选卷分配一个驱动器号或装载点。
ATTRIBUTES  - 操纵卷或磁盘属性。
ATTACH      - 连接虚拟磁盘文件。
AUTOMOUNT   - 启用和禁用基本卷的自动装载。
BREAK       - 中断镜像集。
CLEAN       - 从磁盘清除配置信息或所有信息。
COMPACT     - 尝试减少文件的物理大小。
CONVERT     - 在不同的磁盘格式之间转换。
CREATE      - 创建卷、分区或虚拟磁盘。
DELETE      - 删除对象。
DETAIL      - 提供对象详细信息。
DETACH      - 分离虚拟磁盘文件。
EXIT        - 退出 DiskPart。
EXTEND      - 扩展卷。
EXPAND      - 扩展虚拟磁盘上可用的最大大小。
FILESYSTEMS - 显示卷上当前和支持的文件系统
FORMAT      - 格式化卷或分区
GPT         - 给选择的 GPT 分区分配属性。
HELP        - 显示命令列表。
IMPORT      - 导入磁盘组。
INACTIVE    - 将所选分区标为不活动。
LIST        - 显示对象列表。
MERGE       - 将子磁盘与其父磁盘合并。
ONLINE      - 使当前标为脱机的对象联机。
OFFLINE     - 使当前标记为联机的对象脱机。
RECOVER     - 刷新所选包中所有磁盘的状态。尝试恢复无效包中的磁盘,并重新同步具有过时丛或奇偶校验数据的镜像卷和 RAID5 卷。
REM         - 不起任何作用。用来注释脚本。
REMOVE      - 删除驱动器号或装载点分配。
REPAIR      - 用失败的成员修复一个 RAID-5 卷。
RESCAN      - 重新扫描计算机,查找磁盘和卷。
RETAIN      - 在一个简单卷下放置一个保留分区。
SAN         - 显示或设置当前启动的操作系统的 SAN 策略。
SELECT      - 将焦点移动到对象。
SETID       - 更改分区类型。
SHRINK      - 减小选定卷。
UNIQUEID    - 显示或设置磁盘的 GUID 分区表(GPT)标识符或主启动记录(MBR)签名。

5. 总结

  1. Docker Desktop的虚拟磁盘(如ext4.vhdx、docker_data.vhdx)在Windows系统中不会自动缩减空间占用。即使实际使用空间远低于最大值,系统仍会保留虚拟磁盘曾经达到的最大容量。需要定期手动释放。
  2. vhdx格式的虚拟磁盘,自动扩容但不会自动缩容,是其自身特性,与Docker Desktop也无关。
  3. windows下有个磁盘管理命令行工具dislpart

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907949.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入掌握FastAPI与OpenAPI规范的高级适配技巧

title: 深入掌握FastAPI与OpenAPI规范的高级适配技巧 date: 2025/03/30 01:16:11 updated: 2025/03/30 01:16:11 author: cmdragon excerpt: OpenAPI规范是RESTful API的标准描述格式,FastAPI通过自动化Schema生成机制将Pydantic模型和路径操作转换为标准OpenAPI文档,实现实…

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB Docker Desktop 版本:v4.34.3如果赶时间,可以直接看结论。 Docker Desktop用的频次不是很高,记得之前安装完,用wsl --list -v命…

Prometheus的标签管理

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.标签概述1.什么是标签2.标签主要有两种表现形式3.Prometheus对数据处理的流程二.relabel_configs修改target标签案例1.为targets自定义打标签案例2.使用target_label新增标签2.relabel_configs替换标签…

极速启动,SAE 弹性加速全面解读

本文将深入探讨 SAE 如何通过镜像加速、应用启动加速、CPU Burst 等核心技术手段,实现极速启动与高效运行,帮助用户构建更加稳定、高效的云端应用。作者:牛通(奇卫) 在当今快速发展的云计算时代,业务的稳定性和响应速度成为了企业竞争力的重要标志。无论是应对突发流量还…

Redis缓存穿透、击穿与雪崩:问题分析与解决方案

在现代高并发系统中,Redis作为缓存层被广泛使用,其高效的读写性能为系统提供了强大的支持。然而,在使用Redis缓存的过程中,缓存穿透、击穿和雪崩等问题可能会对系统造成严重影响。本文将围绕这些问题展开讨论,并结合Redis的特性提出具体的解决方案。 一、Redis缓存穿透:如…

java - 使用OpenCV + Tesseract识别图片验证码

java - 使用OpenCV + Tesseract识别图片验证码tesseract tesseract-ocr/tesseract: 是一个开源的光学字符识别(OCR)引擎,适用于从图像中提取和识别文本。特点是可以识别多种语言,具有较高的识别准确率,并且支持命令行和API调用。项目地址:https://gitcode.com/gh_mirror…

【笔记】力扣 2316. 统计无向图中无法互相到达点对数——并查集, + 一种巧妙的求两两相乘之和的方法

2316. 统计无向图中无法互相到达点对数 中等 提示 给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相到达 的不同 点对数目 。 示例…

APT Package Manager

from pixivWhat is APT? Anatomy of the Package System(软件包系统剖析), is the Debian packaging system, 用于管理软件包,可以将其想象成命令行版的App Store.Debian 是一个自由且开源的 Linux 发行版,Ubuntu 是基于 Debian 构建的 Linux 发行版。它由 Canonical 公司…

22.1-任务的状态 第22章-FreeRTOS项目实战--任务的创建与执行 FreeRTOS 项目 FreeRTOS学习笔记 FreeRTOS移植 FreeRTOS开源项目 FreeRTOS面试题汇

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里: https://www.bilibili.com/video/BV16x4y1M7EN/?share_source=copy_web&vd_source=f5d5850ab773377dff308188468fbc77 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式…

ART树在订单簿管理中的应用

背景近期在工作中,我接触到了一种高效的数据结构——自适应基数树(Adaptive Radix Tree,ART)。ART 是一种基于基数树(Radix Tree)的数据结构,旨在提供高效的键值存储和查找功能。与传统的基数树不同,ART 通过自适应调整节点大小(如 Node4、Node16、Node48 和 Node256)…

AtCoder Beginner Contest 399 ABCDEF 题目解析

A - Hamming Distance 题意 给定两个长度均为 \(N\) 的字符串 \(S\) 和 \(T\),求总共有多少个位置不同。 思路 直接输入字符串后逐位判断即可。 代码 int n; string s, t; cin >> n >> s >> t; int ans = 0; for(int i = 0; i < n; i++)ans += (s[i] != …

Solana编译失败探讨(OpenEuler RISC-V版)

Solana 是 2017 年由 Anatoly Yakovenko 创立的开源项目,旨在打造高性能、去中心化且低成本的区块链平台2。它采用独特的 Proof of History(PoH)共识机制,结合 Tower BFT 等技术,实现了每秒数千笔交易的高吞吐量,确认时间仅 400 毫秒,每笔交易中位数费用为 0.00064 SOL1…