daemon.json 不支持镜像垃圾回收配置,仅可配置日志轮转、buildkit 构建缓存自动回收(如 "gc":{"enabled":true,"defaultkeepstorage":"20gb"})和镜像加速器;真正的镜像清理需通过 docker image prune 等命令或私有 registry 手动 gc 实现。
daemon.json 是 docker 守护进程的全局配置文件,它不支持直接配置镜像垃圾回收(gc)策略。docker 本身没有内置“自动后台 gc 服务”,也没有在 daemon.json 中提供类似 gc.enabled 或 prune.interval 这样的原生参数来启用或调度镜像清理。
你看到的某些配置(比如 "gc":{"enabled":true,"defaultKeepStorage":"20GB"})实际属于 BuildKit 构建缓存的自动回收机制,仅作用于构建过程产生的缓存(即 /var/lib/docker/buildkit/ 下的数据),和镜像层、manifest、blob 的仓库级 GC 完全无关。
✅ 正确理解:哪些能配?哪些不能配?
❌ daemon.json 不能做的:
- 不支持设置「镜像自动删除」或「私有 registry 的 GC 触发」
- 不支持按时间/标签/引用关系自动清理
docker images或 registry 存储 - 没有
image-gc,registry-gc,prune-schedule等字段
✅ daemon.json 能做的(间接影响空间管理):
- 配置日志轮转(防止单个容器日志无限增长)
- 启用 BuildKit 并配置其缓存自动回收(仅限构建缓存)
- 添加镜像加速器(减少拉取失败导致的重复尝试和临时层残留)
✅ 推荐配置项(加到 /etc/docker/daemon.json)
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"builder": {
"gc": {
"enabled": true,
"defaultKeepStorage": "20GB"
}
},
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
⚠️ 修改后必须重启 Docker:
sudo systemctl restart docker
✅ 镜像与仓库真正的 GC 策略怎么设?
| 场景 | 方式 | 说明 |
|---|---|---|
本地镜像清理(docker images) |
命令行 + 定时任务 |
docker image prune -f --filter "until=72h",用 cron 或 systemd timer 定期执行 |
| 私有 Registry(如 registry:2)清理 | 手动停服 + garbage-collect
|
必须: • 启用 delete: enabled: true• 按 digest 删除 manifest • 停 registry 后执行 docker exec registry /bin/registry garbage-collect ...
|
| Harbor 仓库清理 | Web UI 或 API 设置生命周期规则 | Harbor 支持基于标签正则、保留数量、创建时间的自动清理策略,无需手动 GC |
? 小贴士:避免踩坑
- 不要试图在
daemon.json里写"prune": {"auto": true}—— Docker 会启动失败或忽略 -
docker system prune等命令不会自动运行,必须显式调用或封装进脚本 - 私有 registry 的 GC 不是“删 tag 就释放空间”,必须先删 manifest digest,再停服执行 GC
- 构建缓存(BuildKit)和镜像层(images/blobs)是两套独立存储,GC 互不影响
需要我帮你写一个带锁、带预检、可 cron 定时执行的 docker image prune 自动化脚本,或者私有 registry 的 GC 安全执行流程模板,可以随时说。











