docker无全局磁盘限制开关,需分层控制:一、用--storage-opt size=2g限制容器可写层大小;二、对挂载目录启用xfs项目配额;三、harbor项目级quota防镜像撑盘;四、配合docker system df与prune定期清理。

Docker 本身不提供全局磁盘空间限制开关,但可以通过分层策略精准控制磁盘占用——核心是区分「容器自身写入」和「外部数据存储」两类场景,分别施加硬性约束。
一、限制单个容器的根文件系统大小
适用于 Overlay2(内核 ≥5.6)或 Devicemapper + direct-lvm 环境:
- 启动时用
--storage-opt size=2G指定容器可写层上限 - 进入容器执行
df -h /,可见根分区显示为设定值(如 2.0G) - 注意:该参数对 bind mount 或 volume 不生效;无法动态调整;ZFS/Btrfs/XFS 原生不支持
二、对挂载目录做文件系统级配额(推荐)
当容器需持久写入日志、数据库或缓存时,应将数据目录挂载到宿主机,并启用底层配额:
- 使用 XFS 文件系统,挂载时添加
uquota,gquota,pquota选项 - 为具体路径(如
/mnt/data/app)设置项目配额:xfs_quota -x -c'project -s app' /mnt/data,再执行xfs_quota -x -c'limit -p bhard=5g app' /mnt/data - 容器启动时挂载该路径:
docker run -v /mnt/data/app:/app ubuntu - 配额由内核强制执行,精度高、开销低,且支持后续调整
三、限制镜像仓库的总存储量(如 Harbor)
防止某项目上传过多镜像撑爆磁盘:
- Harbor v2.0+ 支持项目级 Quota,在 Web UI 中进入 Projects → 目标项目 → Configuration,勾选 Enable Quota 并填入上限(如 10GB)
- 配额统计所有镜像层总大小(含历史标签与悬空层),超限后
docker push返回 413 错误 - 删除镜像后需手动触发垃圾回收(Garbage Collection),配额才释放
四、日常监控与清理机制
配额只是预防手段,还需主动管理:
- 定期运行
docker system df -v查看镜像、容器、卷的实际占用 - 清理 dangling 镜像:
docker image prune -f - 清理未使用的卷:
docker volume prune -f - 对
/var/lib/docker/overlay2下各容器目录用du -sh定位异常大目录
不复杂但容易忽略。











