如何限制启用SSH的Ubuntu 20.04 Docker容器磁盘容量?
容器磁盘空间限制问题解决办法
首先明确核心问题:你添加的storage_opt: size: 100G不起作用,是因为Docker默认的overlay2存储驱动不支持该参数——这个选项仅对devicemapper、btrfs这类特定存储驱动生效,而overlay2直接共享主机文件系统层,所以容器内执行df -H会显示主机磁盘状态。
下面给你两种实用的解决思路:
方法一:用独立镜像文件模拟磁盘(最直接)
这种方式相当于给容器分配一个独立"虚拟磁盘",与主机磁盘隔离:
- 在主机上创建100G稀疏镜像文件(不会立刻占满100G,实际占用随数据量增长):
dd if=/dev/zero of=/opt/container_disk.img bs=1G count=0 seek=100 - 将镜像格式化为ext4文件系统:
mkfs.ext4 /opt/container_disk.img - 修改
docker-compose.yml,把镜像文件挂载到容器内指定目录(比如/mnt/container_storage):
后续容器内写入services: ubuntu-vm: # 保留原有配置 volumes: - /opt/container_disk.img:/mnt/container_storage:rw/mnt/container_storage的内容会被限制在100G以内,不会无占用主机磁盘。
方法二:用cgroup磁盘配额(Docker原生支持,需主机配置)
若你的Docker版本在20.10以上,且主机文件系统为ext4或xfs并开启quota功能,可直接通过资源限制实现:
修改docker-compose.yml,给容器添加存储限制:
services: ubuntu-vm: # 保留原有配置 resources: limits: storage: 100G
这种方式无需额外创建镜像文件,但要满足两个前提:
- 主机文件系统开启quota(ext4挂载需加
usrquota,grpquota参数,xfs需加prjquota) - Docker使用cgroupv2(新版本默认已启用)
另外你提到的"映射主机磁盘到容器/dev/sdx"也可行,操作和镜像文件方式类似,只需把/opt/container_disk.img替换为真实分区路径(比如/dev/sdb1)即可。
内容的提问来源于stack exchange,提问作者user20257513
相关产品推荐
相关产品推荐

