跳到主要内容
Mole
概览 功能 口碑 定价 常见问题 博客
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES
立即购买购买 下载

    帮助、文档、更新日志和文章

    首页/博客

    如何清理 Docker for Mac,又不丢数据

    开发者清理发布于 2026年6月26日更新于 2026年8月8日约 2 分钟

    Docker Desktop 的镜像、容器可写层、构建缓存和数据卷都放在 Linux 虚拟磁盘中,很容易占用几十 GB,其中构建缓存通常能重建,数据库卷却可能是重要数据的唯一副本,所以 Docker 自己的清单比范围最大的 prune 命令更适合作为起点。

    为什么空间没有立刻回来

    Docker Desktop 在 macOS 上运行一台 Linux 虚拟机,数据通常保存在稀疏虚拟磁盘 Docker.raw 中,它的 Mac 存储说明给出了入口:「Docker Desktop > Settings > Resources > Advanced」,这里能看到位置、上限和实际占用,也能安全移动虚拟磁盘,直接用 Finder 搬动则可能破坏配置。

    稀疏文件的逻辑上限可能很大,实际分配却小得多,所以 ls -lh 看到的数字不能代表真实占用,Docker 内部统计更接近各类对象的实际情况:

    docker system df -v
    

    详细视图会分开列出镜像、容器、数据卷和构建缓存,其中「Reclaimable」只表示 Docker 没发现当前引用,并不能判断以后是否还会用到已停止容器、旧镜像或数据卷,docker ps -a 和 docker volume ls 可以补上这部分背景。

    从范围最小的清理开始

    直接删除虚拟磁盘文件等同于丢掉整个 Docker 环境,按类别从 Docker 内部回收更容易控制范围:

    docker builder prune --filter until=168h
    docker image prune
    docker container prune
    

    第一条移除七天前的构建缓存,可以按自己的工作周期调整,后两条会在删除悬空镜像和已停止容器前确认,每一步之后重新运行 docker system df -v,看实际回收了什么。

    Docker 的清理说明把 docker system prune 定义为范围更广的便捷命令,加入 -a 会删除所有未使用镜像而不只是悬空层,加入 --volumes 还会处理未使用的匿名数据卷,其中可能有数据库和其他状态。

    docker system prune -a --volumes 的范围很宽,尤其会触及可能保存数据库的数据卷,卷名、标签和归属可以先这样查看:

    docker volume ls
    docker volume inspect <volume-name>
    

    Compose 数据卷通常带有项目与服务标签,确认所属项目并导出无法重建的数据之后,再删除。

    让虚拟磁盘归还物理空间

    prune 会先在 Linux 文件系统内部释放块,macOS 不一定同时拿回空间,当前 Docker 文档说明 Docker.raw 通常会在数秒内归还符合条件的块,旧式 Docker.qcow2 依赖后台过程,可能要几分钟。

    这里更有意义的是重新测量物理占用而不是逻辑上限,恢复出厂设置也不是压缩,它会销毁本地容器、镜像、数据卷和设置,只适合已经决定丢弃整个环境并导出重要数据的情况。

    Docker.raw 为什么只增不减

    Docker.raw 是 Linux 虚拟机的稀疏磁盘,来宾系统写入时它会增长,删除对象时则先把来宾文件系统中的块标为空闲,只有来宾发出 TRIM 或 discard、Docker Desktop 再执行相应回收,macOS 才能拿回符合条件的物理块,时间取决于 Docker Desktop 版本和磁盘镜像实现。

    因此要分别测量 Docker 内部逻辑空间和 macOS 物理容量,直接删除 Docker.raw 等同于销毁整个 Docker 环境。

    稀疏 Docker.raw 文件随来宾虚拟机写入而增长,并通过 discard 与压缩把符合条件的块归还给 macOS。
    删除 Docker 对象先释放虚拟机内部空间,之后才可能把物理空间归还 macOS。

    Mole 的「分析」页可以发现虚拟磁盘及其实际物理占用,Docker 命令行则负责判断内部对象的引用关系,前者回答空间在哪里,后者回答里面是什么。

    一个较容易复核的顺序是:运行 docker system df -v,确认旧项目和有状态数据卷,导出唯一数据,再逐类清理,并在每一步复查 Docker 统计和 macOS 容量,最容易安全回收的通常是旧构建缓存,而不是身份不明的数据卷。

    腾出空间、管理 App、维护系统、看清磁盘和实时状态,都在一个原生 Mac App 里,一次买断不用订阅。

    看看 Mole

    继续阅读

    • 开发者清理如何清理开发工具缓存,又不破坏构建约 3 分钟
    • 开发者清理如何清理 Xcode,又不丢失发布归档约 2 分钟
    • 开发者清理如何安全清理 Homebrew约 2 分钟

    Mole · 鼴

    Mac 清理、软件与状态工具。

    v1.13.0 (162) · 更新日志

    支持

    帮助 功能文档 更新日志

    法律

    服务条款 隐私政策 退款政策

    资源

    博客 命令行工具 合作推广

    联系

    Twitter hi@mole.fit

    请认准官网 mole.fit · 避免下载到来路不明的版本

    命令行版继续免费开源。