Docker报disk quota exceeded本质是底层存储空间耗尽或配额限制,需先用df -h和docker system df区分磁盘满与storage-opts配额问题,再针对性清理日志、悬空资源或调整daemon.json配置。

直接定位根源再动手,比盲目清理更高效。Docker 存储挂载点满或报 disk quota exceeded,本质是底层存储空间被耗尽——不是容器“太大”,而是它写入的路径(通常是 /var/lib/docker/overlay2)所在分区已无可用空间,或被显式配额限制住。
查清到底是空间满还是配额锁死
先区分两类问题,处理方式完全不同:
-
磁盘空间 100% 占用:执行
df -h,重点看/var/lib/docker所在挂载点(如/或/var)的Use%是否为 100%;再用docker system df看 Docker 内部各组件(镜像、容器、卷、缓存)占用详情。 -
配额超出(disk quota exceeded):检查
/etc/docker/daemon.json是否配置了storage-opts,例如"overlay2.size=2G"—— 这会强制单个 overlay2 层最大只能写 2GB,超限即报错,和磁盘总空间无关。
快速释放空间的实操步骤
确认是空间满后,按优先级顺序执行:
- 清空容器日志:
find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \;(不要用 rm 删除,避免 Docker 守护进程写入失败) - 清理无用资源:
docker system prune -a --volumes(删掉所有未运行容器、悬空镜像、未使用卷和网络;加-f可跳过确认) - 手动定位大目录:若仍有某 overlay2 子目录异常庞大(如
/var/lib/docker/overlay2/xxx/diff),进该diff目录执行du -sh * | sort -hr | head -5,看是/var/log、/tmp还是业务数据目录撑爆,针对性处理。
从配置层面预防复发
临时清理治标,配置优化才能治本:
-
限制日志大小:在
/etc/docker/daemon.json中添加:{"log-opts": {"max-size": "100m", "max-file": "3"}},然后systemctl reload docker -
规避 overlay2 写爆风险:对易产生大量临时文件的容器(如含日志服务、缓存服务),启动时用
--tmpfs /tmp:rw,size=512m或挂载宿主机空目录替代默认写入路径。 -
迁移 Docker 根目录:若原分区确实太小,停掉 Docker 后,将
/var/lib/docker整体移到大分区(如/home/docker/lib),再在daemon.json中设{"data-root": "/home/docker/lib"}并重启。
配额类错误的专项修复
如果确认是 storage-opts 导致的 disk quota exceeded:
- 编辑
/etc/docker/daemon.json,删掉或调高overlay2.size=xxG的值(如改为10G) - 注意:修改后需
systemctl restart docker,且该设置仅影响新创建的容器,旧容器仍受限于原 size;如急需恢复,可删掉对应 overlay2 目录(确保容器已停止)再重启 Docker


















