答案是磁盘配额(quota)限制导致写入失败。需用mount | grep quota检查配额启用状态,再通过sudo quota -u $(whoami)或sudo xfs_quota -x -c 'report -h' /var/lib/docker等命令验证用户、组或project配额是否触限,并结合df -i排查inode耗尽及grace time过期问题。

安装 Docker 后若镜像拉取失败,且错误表现为 no space left on device、write /var/lib/docker/...: no space left on device 或拉取中途中断无明确报错,很可能是磁盘配额(disk quota)或存储空间限制所致。需区分“物理磁盘满”和“配额限制”——后者常被忽略,但同样会阻止写入。
确认是否启用了磁盘配额(quota)
Docker 本身不直接管理 quota,但宿主机若启用了用户/组配额(尤其是对 docker 组或 root 用户),会拦截写操作。执行以下命令检查:
- 查看系统是否启用 quota:
mount | grep quota—— 若输出含usrquota、grpquota或prjquota,说明该分区启用了配额 - 检查 docker 存储目录所在分区的配额使用情况:
sudo quota -u $(whoami)(查用户配额)或sudo quota -g docker(查 docker 组配额) - 若使用 project quota(如 XFS 文件系统),运行:
sudo xfs_quota -x -c 'report -h' /var/lib/docker
检查 Docker 存储驱动与实际挂载点
Docker 默认将数据存于 /var/lib/docker,但该路径可能位于启用了配额的逻辑卷或子卷中(例如 LVM 卷、Btrfs 子卷、XFS project)。执行:
Docker Hub (hub.docker.com)。此技能适用于所有 Docker Hub 操作,包括读取、创建、更新和删除数据。只要任务涉及 Docker Hub,就使用此技能。
-
df -h /var/lib/docker确认挂载点 -
findmnt -D /var/lib/docker查看底层文件系统类型及挂载选项 - 若为 XFS:
sudo xfs_info /var/lib/docker看是否启用projquota - 若为 Btrfs:
sudo btrfs qgroup show /var/lib/docker检查是否有 qgroup 限额
验证配额是否实际触发限制
即使显示“配额未满”,也可能因 inodes 耗尽或 soft limit + grace time 导致临时拒绝写入:
- 检查 inodes 使用率:
df -i /var/lib/docker—— 若Use%接近 100%,即使磁盘空间充足也会失败 - 查看 quota grace time 是否过期:
sudo quota -u $(whoami) -v,注意grace字段是否标为expired - 尝试手动写测试文件:
sudo -u root dd if=/dev/zero of=/var/lib/docker/test_quota bs=1M count=10,观察是否报Disk quota exceeded
临时绕过或修复配额限制
若确认是配额导致,可按场景处理:
- 临时提升配额(需 root):
sudo setquota -u $(whoami) 0 10G 0 0 /dev/sdXN(替换为实际设备) - 禁用配额(仅测试环境):
sudo mount -o remount,usrquota,grpquota /→ 改为sudo mount -o remount /,再重启 dockerd - 调整 Docker 数据根目录到无配额路径:
"data-root": "/opt/docker"写入/etc/docker/daemon.json,确保/opt/docker所在分区未启用 quota,然后sudo systemctl restart docker - 清理后仍受限?检查
/var/lib/docker目录属主是否匹配 quota 用户 ID:ls -ld /var/lib/docker,必要时sudo chown root:root /var/lib/docker










