[{"data":1,"prerenderedAt":532},["ShallowReactive",2],{"blog-article-\u002Fzh\u002Fblog\u002Fdocker-disk-space-cleanup":3},{"id":4,"title":5,"author":6,"body":7,"category":513,"cover":514,"coverAlt":515,"description":516,"draft":517,"extension":518,"meta":519,"navigation":520,"path":521,"publishedAt":522,"seo":523,"stem":524,"tags":525,"topics":528,"translationKey":530,"updatedAt":522,"__hash__":531},"articles_zh\u002Fzh\u002Fblog\u002Fdocker-disk-space-cleanup.md","Docker 占用太多磁盘空间：清理构建缓存，保留镜像和数据卷","Harry",{"type":8,"value":9,"toc":506},"minimark",[10,30,38,43,46,57,63,83,86,106,121,133,136,139,146,153,160,163,171,238,246,249,252,258,296,299,337,345,351,373,387,393,409,412,415,432,435,455,462,470,488,496,502],[11,12,13,17,18,22,23],"p",{},[14,15,16],"strong",{},"如果占用主要来自构建缓存，可以先清理未使用的缓存，保留镜像、容器、网络和数据卷。"," Docker 提供的 ",[19,20,21],"code",{},"builder prune"," 就是针对构建缓存的清理命令。不过，清掉缓存后，下一次构建可能需要重新下载依赖或生成数据；“现在未使用”不代表“以后用不上”。",[24,25,29],"a",{"href":26,"rel":27},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fbuilder\u002Fprune\u002F",[28],"nofollow","Docker 构建缓存清理说明",[11,31,32,33,37],{},"想先看清这部分占用，再决定是否值得清理，可以用 ",[24,34,36],{"href":35},"\u002Fzh","MangoDisk"," 的深度清理。它会读取本机默认 Docker context 的缓存信息，在界面中显示预计占用；由你选择是否执行，清理交给 Docker 的官方命令完成。",[39,40,42],"h2",{"id":41},"用-mangodisk-查看-docker-构建缓存","用 MangoDisk 查看 Docker 构建缓存",[11,44,45],{},"Docker 的命令行能够查看和清理缓存。MangoDisk 把这两步放进图形界面，让你先查看候选占用和清理影响，再选择是否处理，不必记住不同 prune 命令的参数和范围。",[11,47,48],{},[49,50],"img",{"alt":51,"decoding":52,"height":53,"loading":54,"src":55,"width":56},"MangoDisk Windows 简体中文版深度清理界面，可查看各类清理条目及预计占用","async",1233,"lazy","https:\u002F\u002Fassets.mangodisk.app\u002Fimages\u002Fscreenshots\u002Fwindows\u002Fzh\u002Flight-01-deep-cleanup.jpg",1838,[11,58,59],{},[60,61,62],"em",{},"上图为深度清理界面示例，不是本次 Docker 检查的截图；具体条目取决于本机扫描结果。",[11,64,65,66,70,71,74,75,78,79,82],{},"打开",[24,67,69],{"href":68},"\u002Fzh\u002Fdocs\u002Ffeatures\u002Fdeep-clean","深度清理","，完成",[14,72,73],{},"标准扫描","，在",[14,76,77],{},"容器缓存","中查看 ",[14,80,81],{},"Docker 构建缓存","。这个条目默认不选中，扫描不会自动删除缓存。",[11,84,85],{},"准备清理时：",[87,88,89,93,96],"ol",{},[90,91,92],"li",{},"等正在进行的构建任务结束，保持 Docker 服务运行；使用 Docker Desktop 时，不要先退出它。",[90,94,95],{},"查看 Docker 构建缓存的预计占用，确认可以接受后续重新构建或下载的成本。",[90,97,98,99,102,103,105],{},"选择",[14,100,101],{},"暂不选择","，只勾选 ",[14,104,81],{},"，核对清理计划后再确认执行。",[11,107,108,111,112,115,116],{},[14,109,110],{},"这个条目不会删除镜像、容器、网络或数据卷，但不能按单个项目选择缓存。"," 当前实现调用 ",[19,113,114],{},"docker --context default builder prune --all --force","，清理默认 context 下 Docker 判定为未使用的构建缓存。不要把它理解为“只清某个旧项目”。",[24,117,120],{"href":118,"rel":119},"https:\u002F\u002Fgithub.com\u002Fharry0703\u002FMangoDisk\u002Fblob\u002Fv1.1.7\u002Fsrc-tauri\u002Fcrates\u002Fmangodisk-core\u002Fsrc\u002Fcleanup\u002Fcleaners\u002Fdocker_build_cache.rs",[28],"MangoDisk v1.1.7 的 Docker 清理实现",[11,122,123,124,127,128],{},"这里的 context 是 Docker 客户端连接服务的配置。MangoDisk 固定使用 ",[19,125,126],{},"default","，不会跟随你当前选中的其他 context；如果这个目标无法连接，条目就无法正常预览。其他本机 context、自定义 Buildx builder 和远程服务，需要另行核对，不属于这个条目的覆盖范围。",[24,129,132],{"href":130,"rel":131},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fmanage-resources\u002Fcontexts\u002F",[28],"Docker context 说明",[11,134,135],{},"Docker 服务需要运行，才能提供缓存信息并执行清理。如果没有扫描结果，先确认 Docker 已安装、服务可连接；不能据此认定 Docker 没有占用空间。",[39,137,138],{"id":138},"预计占用不等于实际释放空间",[11,140,141,142,145],{},"MangoDisk 的预览估算，只统计 Docker 标记为",[14,143,144],{},"未使用、未共享且大小非零","的构建缓存记录。共享数据不计入这项估算，也不能把所有镜像和缓存的显示大小直接相加。",[11,147,148,149,152],{},"2026 年 10 月 9 日，在 macOS 15.7.7 上使用 Docker 29.1.3 进行只读检查，返回了 134 条构建缓存记录。其中 56 条符合上述统计条件，按 Docker 显示的大小合计约 ",[14,150,151],{},"11.6 GB","。这是清理前的近似估算，没有执行删除，也不是已释放空间的结果。",[11,154,155,156,159],{},"预览数字用于判断是否值得处理，不是一份可以逐条勾选的缓存清单。执行时，Docker 按 ",[19,157,158],{},"builder prune --all"," 的规则决定哪些未使用的缓存可以移除；宿主机最终增加多少可用空间，还需要清理后另行检查。",[39,161,162],{"id":162},"先分清缓存和需要保留的数据",[11,164,165,166],{},"构建缓存保存了可以复用的构建步骤结果，帮助后续构建少做重复工作。项目、依赖或构建方式变化后，缓存也会变化；缓存占用较大，并不意味着 Docker 出了故障。",[24,167,170],{"href":168,"rel":169},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fcache\u002F",[28],"Docker 构建缓存说明",[172,173,174,190],"table",{},[175,176,177],"thead",{},[178,179,180,184,187],"tr",{},[181,182,183],"th",{},"内容",[181,185,186],{},"用途",[181,188,189],{},"本文的处理方式",[191,192,193,205,216,227],"tbody",{},[178,194,195,199,202],{},[196,197,198],"td",{},"构建缓存",[196,200,201],{},"复用构建步骤及相关数据",[196,203,204],{},"确认可接受重建成本后，按需清理未使用部分",[178,206,207,210,213],{},[196,208,209],{},"镜像",[196,211,212],{},"创建容器所需的运行环境",[196,214,215],{},"保留，不随构建缓存一起清理",[178,217,218,221,224],{},[196,219,220],{},"容器",[196,222,223],{},"运行或已停止的应用实例，可能含仍需保留的内容",[196,225,226],{},"保留；停止不等于可以删除",[178,228,229,232,235],{},[196,230,231],{},"数据卷",[196,233,234],{},"持久保存数据库、上传文件等数据",[196,236,237],{},"保留，不按缓存处理",[11,239,240,241],{},"数据卷的生命周期独立于容器。即使当前没有容器使用它，里面也可能存着需要保留的数据，不能仅凭“未使用”就删掉。",[24,242,245],{"href":243,"rel":244},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fstorage\u002Fvolumes\u002F",[28],"Docker 数据卷说明",[11,247,248],{},"同样，构建缓存是否值得保留，也要看接下来的工作。如果马上还要反复构建同一套项目，或要在离线环境中工作，保留缓存通常更合适。磁盘确实紧张、能够重新获取依赖时，再考虑清理。",[39,250,251],{"id":251},"用官方命令查看和清理",[11,253,254,255,257],{},"习惯命令行的用户，可以直接完成同样的检查。下面的命令显式使用 ",[19,256,126],{},"，和上述 MangoDisk 条目保持一致。先查看连接配置，确认目标是本机 Docker 服务：",[259,260,265],"pre",{"className":261,"code":262,"language":263,"meta":264,"style":264},"language-sh shiki shiki-themes github-light github-dark","docker context ls\ndocker context inspect default\n","sh","",[19,266,267,283],{"__ignoreMap":264},[268,269,272,276,280],"span",{"class":270,"line":271},"line",1,[268,273,275],{"class":274},"sScJk","docker",[268,277,279],{"class":278},"sZZnC"," context",[268,281,282],{"class":278}," ls\n",[268,284,286,288,290,293],{"class":270,"line":285},2,[268,287,275],{"class":274},[268,289,279],{"class":278},[268,291,292],{"class":278}," inspect",[268,294,295],{"class":278}," default\n",[11,297,298],{},"确认连接目标后，查看空间占用，再按需展开详细信息。这些命令只查看，不删除：",[259,300,302],{"className":261,"code":301,"language":263,"meta":264,"style":264},"docker --context default system df\ndocker --context default system df --verbose\n",[19,303,304,321],{"__ignoreMap":264},[268,305,306,308,312,315,318],{"class":270,"line":271},[268,307,275],{"class":274},[268,309,311],{"class":310},"sj4cs"," --context",[268,313,314],{"class":278}," default",[268,316,317],{"class":278}," system",[268,319,320],{"class":278}," df\n",[268,322,323,325,327,329,331,334],{"class":270,"line":285},[268,324,275],{"class":274},[268,326,311],{"class":310},[268,328,314],{"class":278},[268,330,317],{"class":278},[268,332,333],{"class":278}," df",[268,335,336],{"class":310}," --verbose\n",[11,338,339,340],{},"比较镜像、容器、数据卷和构建缓存的占用。如果最大的部分是数据卷，清理构建缓存就无法解决主要问题；应先确认卷中保存的是什么。",[24,341,344],{"href":342,"rel":343},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fsystem\u002Fdf\u002F",[28],"Docker 空间占用命令说明",[11,346,347,350],{},[14,348,349],{},"确认可以移除这个目标下所有未使用的构建缓存，并接受后续重建成本后","，再执行：",[259,352,354],{"className":261,"code":353,"language":263,"meta":264,"style":264},"docker --context default builder prune --all\n",[19,355,356],{"__ignoreMap":264},[268,357,358,360,362,364,367,370],{"class":270,"line":271},[268,359,275],{"class":274},[268,361,311],{"class":310},[268,363,314],{"class":278},[268,365,366],{"class":278}," builder",[268,368,369],{"class":278}," prune",[268,371,372],{"class":310}," --all\n",[11,374,375,378,379,382,383],{},[19,376,377],{},"--all"," 表示处理所有未使用的构建缓存，而不只是悬空缓存（dangling cache）。上面的手动命令没有加 ",[19,380,381],{},"--force","，会保留 Docker 自身的确认提示。清理不经过回收站或废纸篓，缓存不能从其中恢复；后续构建需要重新生成相关数据。",[24,384,386],{"href":26,"rel":385},[28],"Docker builder prune 参数说明",[11,388,389,390,392],{},"MangoDisk 使用 ",[19,391,381],{}," 是为了在应用确认清理后执行命令，不会再弹出终端提示。它当前不提供按缓存年龄筛选或设置保留容量的选项；有这些需求时，可以参考官方命令参数单独处理。",[11,394,395,396,399,400,403,404],{},"只想清构建缓存时，不需要改用 ",[19,397,398],{},"system prune","。它还会处理停止的容器、未使用的网络和镜像；加上 ",[19,401,402],{},"--volumes"," 后，还会涉及未使用的匿名卷。两者的范围不同，不能当作同一个命令替换。",[24,405,408],{"href":406,"rel":407},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fsystem\u002Fprune\u002F",[28],"Docker system prune 范围说明",[39,410,411],{"id":411},"清理后检查缓存和磁盘占用",[11,413,414],{},"清理完成后，在同一个 context 下再次查看：",[259,416,418],{"className":261,"code":417,"language":263,"meta":264,"style":264},"docker --context default system df\n",[19,419,420],{"__ignoreMap":264},[268,421,422,424,426,428,430],{"class":270,"line":271},[268,423,275],{"class":274},[268,425,311],{"class":310},[268,427,314],{"class":278},[268,429,317],{"class":278},[268,431,320],{"class":278},[11,433,434],{},"先比较构建缓存的占用，再查看系统的可用磁盘空间。以后再次构建时，Docker 可能重新执行部分步骤、下载依赖并生成缓存，这是正常行为。不要为了让缓存一直保持很小而每次构建完都清空。",[11,436,437,438,441,442,445,446,449,450],{},"如果使用 Mac 版 Docker Desktop，还要区分",[14,439,440],{},"磁盘镜像的容量上限","和",[14,443,444],{},"实际占用","。Docker Desktop 把 Linux 容器和镜像保存在磁盘镜像中，有些工具显示的是它的最大容量；可以在 ",[14,447,448],{},"Settings → Resources → Advanced"," 中查看实际占用和容量上限。",[24,451,454],{"href":452,"rel":453},"https:\u002F\u002Fdocs.docker.com\u002Fdesktop\u002Ftroubleshoot-and-support\u002Ffaqs\u002Fmacfaqs\u002F",[28],"Docker Desktop Mac 存储说明",[11,456,457,458,461],{},"不要把 ",[19,459,460],{},"Docker.raw"," 当作普通缓存文件删除，也不要为了让数字变小直接降低磁盘镜像容量上限。Docker 官方说明，降低上限会删除现有磁盘镜像，导致容器和镜像丢失。这与本文只清构建缓存的目标不同。",[11,463,464,465,469],{},"如果构建缓存已经不大，磁盘仍然很满，可以用 MangoDisk 的",[24,466,468],{"href":467},"\u002Fzh\u002Fdocs\u002Ffeatures\u002Fdisk-analysis","磁盘空间分析","定位其他大目录。空间可能来自原始素材、旧项目依赖或其他工具的构建产物，需要按各自用途处理，不必反复清理同一项 Docker 缓存。",[11,471,472,473,477,478,482,483,487],{},"其他开发工具可以参考 ",[24,474,476],{"href":475},"\u002Fzh\u002Fblog\u002Fclean-npm-cache","npm 缓存与 node_modules 的区别","、",[24,479,481],{"href":480},"\u002Fzh\u002Fblog\u002Fcargo-cache-vs-target-folder","Cargo cache 与 target 文件夹的区别","，也可以从",[24,484,486],{"href":485},"\u002Fzh\u002Fblog\u002Ftopics\u002Fdeveloper-cleanup","开发者磁盘清理指南","继续排查。",[11,489,490,491,495],{},"本文产品范围按 MangoDisk v1.1.7 说明。执行前可阅读",[24,492,494],{"href":493},"\u002Fzh\u002Fdocs\u002Fsafety","安全清理指南","，确认清理计划与需要保留的数据。",[11,497,498,501],{},[24,499,500],{"href":35},"下载 MangoDisk","，先查看 Docker 构建缓存的预计占用，再决定是否值得清理。镜像、容器和数据卷继续保留，后续构建的成本由你权衡。",[503,504,505],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":264,"searchDepth":285,"depth":285,"links":507},[508,509,510,511,512],{"id":41,"depth":285,"text":42},{"id":138,"depth":285,"text":138},{"id":162,"depth":285,"text":162},{"id":251,"depth":285,"text":251},{"id":411,"depth":285,"text":411},"开发者磁盘清理","\u002Fimages\u002Fblog\u002Fdocker-disk-space-cleanup.webp","橙色刷子扫走 Docker 蓝色鲸鱼旁的灰色构建缓存方块，镜像、容器和数据卷保持完整","用 MangoDisk 查看 Docker 构建缓存的预计占用，在保留镜像、容器和数据卷的前提下清理未使用缓存，并了解重新构建与磁盘空间回收的区别。",false,"md",{},true,"\u002Fzh\u002Fblog\u002Fdocker-disk-space-cleanup","2026-10-09T10:15:00+08:00",{"title":5,"description":516},"zh\u002Fblog\u002Fdocker-disk-space-cleanup",[526,81,527],"Docker 磁盘空间","Docker Desktop",[529],"developer-cleanup","article-docker-disk-space-cleanup","pYlObW9GUKrzVX03PzGzHjGyvoqy4MT25CmGTA3GXho",1792636702264]