daemon.json 不直接提供存储配额开关,但可通过 storage-opts(如 dm.basesize)、builder.gc、log-opts 和 data-root 等参数协同限制容器可写层、构建缓存、日志体积及数据根目录空间。
daemon.json 本身不直接提供“存储配额”这一开关式配置,但可以通过多个关键参数协同控制 docker 占用磁盘空间的上限和行为。核心思路是:分层管控——限制单个容器可写层、构建缓存、日志体积、数据根路径位置,以及底层存储驱动的块大小。
设置容器可写层大小(devicemapper 驱动)
仅适用于 devicemapper 存储驱动(已不推荐新环境使用,但部分遗留系统仍在用)。通过 dm.basesize 控制每个容器可写层初始大小上限:
- 编辑
/etc/docker/daemon.json - 添加或修改 storage-driver 和 storage-opts:
⚠️ 注意:该值在 daemon 启动时生效,修改后需重启 Docker;且只影响新建容器,已有容器不受影响。
限制构建缓存占用(BuildKit GC 策略)
启用 BuildKit 后,可通过 builder.gc 自动清理过期构建缓存,避免 /var/lib/docker/buildkit/ 无限膨胀:
- 确保 Docker 版本 ≥ 20.10(建议 23.0+)
- 在 daemon.json 中启用 BuildKit 并配置垃圾回收:
✅ 效果:当构建缓存总量超过 15GB,系统自动删除最久未使用的缓存条目。
控制容器日志体积(防日志撑爆磁盘)
默认 json-file 日志不设限,长期运行易占满 /var/lib/docker/containers/ 下的空间:
- 统一限制每容器日志最大尺寸与保留份数:
? 每个容器日志最多保留 5 个 200MB 文件(约 1GB),超出自动轮转压缩删除。
迁移并限定 Docker 数据根目录(最根本的配额手段)
把 /var/lib/docker 挪到独立大容量磁盘,并通过文件系统级配额(如 XFS project quota)或挂载选项约束其总量:
- 在 daemon.json 中指定新路径:
? 操作后需:
– 停止 Docker
– 迁移原数据(rsync -avz /var/lib/docker/ /mnt/docker-data/)
– 修改目录权限(chown -R root:root /mnt/docker-data)
– 重启 Docker
? 提示:配合 XFS 的 project quota 可精确限制该目录总用量,这是生产环境最可靠的空间配额方式。


















