Docker原生不支持对overlay2等主流驱动的单个容器根文件系统设磁盘上限;可行方案包括:①用--tmpfs挂载临时目录并限制内存大小;②绑定挂载宿主机已启用XFS配额的目录;③换用ZFS/Btrfs存储驱动实现子卷级配额;④GitLab等应用层专项控制。

不能靠 --storage-opt size 直接给普通容器设磁盘上限,Docker 原生不支持对 overlay2 等主流驱动的单个容器做根文件系统配额。真正可行的方案得结合宿主机能力或存储驱动特性来落地。
用 tmpfs 挂载关键目录(轻量、即时生效)
适合日志、缓存等临时数据,数据不落盘,大小受内存/swap 限制:
- 启动时加
--tmpfs /app/logs:rw,size=512m,容器内/app/logs最多用 512MB 内存空间 - 可叠加多个
--tmpfs,分别控制不同路径 - 注意:重启容器后数据清空,不适用于需持久化的场景
绑定挂载带宿主机配额的目录(稳定、通用)
把容器数据目录映射到宿主机一个已启用配额的路径,由系统级 quota 控制:
- XFS 文件系统推荐:
mount -o uquota,gquota,pquota /dev/sdb1 /mnt/data - 设置目录限额:
xfs_quota -x -c 'limit bsoft=5g bhard=5g /mnt/data/myapp' /mnt/data - 启动容器:
docker run -v /mnt/data/myapp:/var/lib/app ubuntu - 配额生效后,容器写满 5GB 会报
Disk quota exceeded
换用 ZFS/Btrfs 存储驱动(自动子卷配额)
需提前在宿主机配置好 ZFS 池,并启用配额功能:
- 启动 dockerd 时指定:
dockerd --storage-driver=zfs --storage-opt zfs.poolname=myzpool - 每个容器自动创建独立 ZFS 子卷,如
myzpool/docker/abc123 - 手动设限:
zfs set quota=8G myzpool/docker/abc123 - Btrfs 同理,用
btrfs qgroup limit 10G /path管理
GitLab 类应用的专项控制(场景化兜底)
像 docker-gitlab 这类有内置配额逻辑的应用,优先走应用层配置:
- 限制每人项目数:
GITLAB_DEFAULT_PROJECTS_LIMIT=30 - 制品直传对象存储:
ARTIFACTS_DIRECT_UPLOAD=true,避开本地磁盘 - 备份自动清理:
BACKUP_KEEP_TIME=7,只保留 7 天备份 - 卷挂载到宿主机固定路径,再配合
du -sh /srv/docker/gitlab/gitlab定期监控


















