最有效方法是执行docker system prune -a --volumes全局清理,可一次性删除所有停止容器、未使用镜像(含悬挂与非悬挂)、未使用卷、网络及构建缓存;辅以分步清理悬挂镜像、Buildx缓存、残留挂载点和本地快照。

如果您发现Mac磁盘空间被大量占用,且Docker相关数据持续增长,则很可能是旧镜像、悬挂镜像、未使用卷及残留挂载点长期累积所致。以下是针对该问题的多种清理路径:
一、执行全局系统级深度清理
该方法一次性清除所有停止容器、未使用镜像(含悬挂与非悬挂)、未使用卷、未使用网络及全部构建缓存,适用于空间告急且需快速释放大量空间的场景。
1、打开终端应用,确保Docker Desktop已启动但无关键容器正在运行。
2、输入命令并回车:docker system prune -a --volumes。
3、系统将列出待删除项并提示确认,键入 y 并回车执行。
4、如需跳过交互确认(仅限脚本或确定环境安全时),可追加 -f 参数。
二、分步精准清理挂载点与卷残留
Docker卷(volumes)和绑定挂载(bind mounts)可能在容器删除后仍保留在宿主机文件系统中,尤其当应用使用自定义路径挂载或Docker Desktop异常退出时,/var/folders/下或用户目录中易遗留不可见挂载点。
1、列出所有现存卷:docker volume ls。
2、检查每个卷的实际挂载路径:docker volume inspect
3、对确认废弃的卷执行删除:docker volume rm
4、手动扫描常见挂载残留位置:ls -la ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw 及 /private/var/folders/**/T/com.docker/ 目录,删除其中明确标记为已弃用或时间戳早于30天的子目录(操作前请备份重要数据)。
三、识别并清除悬挂镜像与中间层
悬挂镜像(dangling images)是构建过程中产生的无标签中间层,不被任何容器引用,却持续占用空间;其ID通常显示为
1、查看全部悬挂镜像:docker images -f dangling=true。
2、仅删除这些悬挂镜像:docker image prune。
3、若需同时清理所有未被容器引用的镜像(含带标签但闲置者),运行:docker image prune -a。
4、执行前可预览将被删除的镜像ID列表:docker images -q --filter "dangling=true" 或 docker images -q --filter "until=72h"(筛选72小时内未使用镜像)。
四、清理Buildx构建缓存与本地快照
使用docker buildx进行多平台构建时,其缓存默认存储于 ~/.docker/buildx/cache/,体积常达数GB;此外,Docker Desktop后台可能依赖APFS本地快照机制保存虚拟机状态,亦计入“系统数据”统计。
1、清理Buildx构建缓存:docker builder prune --all。
2、查看当前Buildx构建器配置:docker buildx ls,确认活跃构建器名称。
3、重置默认构建器并清空其缓存:docker buildx rm default && docker buildx create --use --name default。
4、检查Time Machine本地快照是否干扰磁盘统计:tmutil listlocalsnapshots /,若返回大量条目,可执行 sudo tmutil deletelocalsnapshots $(tmutil listlocalsnapshots / | tail -1 | awk '{print $2}') 删除最旧一个快照(逐个清理,避免批量删除引发系统不稳定)。
五、手动定位并卸载残留挂载设备
某些Docker容器(如运行gRPC FUSE、sshfs或自定义内核模块的容器)可能在退出后未正确解除挂载,导致/dev/、/mnt/或/private/var/run/下残留挂载点,进而被系统识别为“已占用但不可见”的空间。
1、列出当前所有挂载点:mount | grep docker\|com\.docker。
2、检查是否存在异常挂载路径,例如以 /private/var/run/docker.sock 为源但目标路径不存在的条目。
3、对确认失效的挂载点执行强制卸载:sudo umount -f 。
4、验证卸载结果:df -h | grep -E "(docker|com\.docker)",输出应为空。











