docker容器存储配额分三层:一是用--storage-opt size限制根文件系统(需overlay2等驱动支持);二是用xfs+prjquota限制挂载目录;三是harbor项目级quota限制镜像上传总量。

在 Docker 中配置容器的存储配额,核心是分两层控制:一是限制容器自身根文件系统的磁盘用量(依赖存储驱动),二是限制镜像仓库中项目级的存储总量(如 Harbor)。两者目标一致——防止单个容器或项目无节制占用磁盘空间,但实现机制和适用场景完全不同。
一、限制单个容器的根文件系统大小
该方式直接约束容器 / 目录可写入的总容量,适用于 Overlay2(内核 ≥5.6)、Devicemapper 等支持配额的存储驱动:
- 启动时用 --storage-opt size=2G 指定上限,例如:
docker run -it --storage-opt size=2G ubuntu - 进入容器执行
df -h /,可见根分区显示为设定值(如 2.0G) - 注意:不支持动态调整;旧版内核或 ZFS/Btrfs 驱动可能不生效;无法限制已挂载的外部卷(volume/bind mount)
二、限制容器挂载目录的磁盘用量(推荐更精细控制)
当容器需写入大量数据(如日志、缓存、数据库文件),建议将数据目录挂载到宿主机特定路径,并对该路径启用文件系统级配额:
- 以 XFS 文件系统为例:挂载时添加 uquota,gquota,pquota 选项
mount -o uquota,gquota,pquota /dev/sdb1 /mnt/data - 为挂载点下的子目录设配额,例如限制
/mnt/data/app最多使用 5GB:xfs_quota -x -c 'project -s app' /mnt/data<br>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 Request Entity Too Large - 删除镜像后配额不会立即释放,需手动触发 Garbage Collection 或等待定时任务运行
四、补充:避免常见误区
容器内应用产生的日志、临时文件若未重定向或轮转,仍可能撑爆容器根目录或挂载点。因此:
- 用
docker run --log-opt max-size=10m --log-opt max-file=3控制日志体积 - 在容器内配置应用自身的清理策略(如 logrotate、定期 truncate)
- 不要依赖
docker system prune自动释放配额——它只清理本地构建缓存和悬空镜像,不影响运行中容器的写入行为











