--storage-opt size=仅对devicemapper+direct-lvm有效,限制容器可写层大小而非卷或绑定挂载;不支持overlay2等主流驱动;替代方案包括tmpfs挂载、宿主机配额、应用层控制及运行时监控。
通过 docker run 的 --storage-opt 参数限制容器磁盘占用,**仅对使用 devicemapper 存储驱动的 docker 环境有效**,且该参数作用于容器的 **写时复制(copy-on-write)层**,而非挂载的卷(volumes)或绑定挂载(bind mounts)。它不能直接限制整个容器生命周期内总磁盘用量,而是限制其可写层(即容器 rootfs)的最大大小。
明确适用前提与限制
--storage-opt size= 仅在以下条件下生效:
- Docker 使用
devicemapper存储驱动(已从 Docker 20.10+ 默认移除,需手动配置); - 必须配合
direct-lvm模式(loop-lvm 不支持 size 限制); - 限制的是容器启动时分配的 thin pool 中的设备大小,不是运行时动态配额;
- 对
overlay2、zfs、btrfs等主流驱动不支持该参数(会报错或忽略)。
正确使用 --storage-opt size=
示例命令(仅 devicemapper + direct-lvm 环境):
docker run --storage-opt size=2G ubuntu:22.04 df -h /
该命令会为容器 rootfs 分配最多 2GB 的可写空间。超出后,容器内进程写入将收到 No space left on device 错误。
注意:
- 必须在 docker run 时指定,无法对已运行容器修改;
- 大小单位支持 b、k、m、g(如 512m);
- 若未设置,默认值由 thin pool 配置决定(通常无硬限制)。
替代方案:更通用的磁盘限制方法
因 --storage-opt size 兼容性差,生产环境推荐以下方式:
-
使用 tmpfs 挂载临时目录:适用于缓存、日志等非持久数据,内存受限但杜绝磁盘增长 ——
-v /tmp:tmpfs:rw,size=100m; -
挂载带配额的外部存储:在宿主机用
xfs_quota或btrfs qgroup对 volume 所在目录/子卷设磁盘配额,再通过-v挂载; - 应用层控制:在容器内通过日志轮转(logrotate)、清理脚本、或业务逻辑限制文件生成量;
-
运行时监控+干预:用
docker system df、du -sh /var/lib/docker/overlay2/*定期检查,结合脚本自动清理或告警。
验证限制是否生效
启动后进入容器,执行:
df -h / —— 查看 rootfs 可用空间是否接近设定值;dd if=/dev/zero of=/testfile bs=1M count=2000 —— 尝试写入超限数据,应失败并提示磁盘满。
若 df 显示空间远大于设定值,说明 --storage-opt 未生效(大概率是存储驱动不匹配)。


















