You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何du显示Docker占用空间超过EBS卷可用容量?

问题原因与解决方案

为什么du统计的overlay2大小远超磁盘实际容量?

这是Docker overlay2存储驱动的分层特性导致的重复统计:

  • overlay2采用分层存储,基础镜像层、中间层会被多个容器共享复用。du是遍历文件系统的每个文件路径统计大小,会把每个容器引用的共享层都单独算一遍,叠加起来就会远大于实际物理磁盘占用。
  • df是从文件系统层面统计已使用的物理块,共享层的物理空间只会被计算一次,所以df的结果才是磁盘实际占用情况。

如何获取Docker实际占用的准确空间?

用Docker官方提供的命令替代du,它会自动处理共享层的重复统计问题:

docker system df

加上-v参数可以查看详细的分层、容器、镜像占用情况,共享层会被标记为SHARED SIZE,仅统计一次:

docker system df -v

容器内显示22G的逻辑

容器内看到的是逻辑空间大小,包含该容器的可写层+所有只读层(基础镜像、中间层)的总和,但只读层是多个容器共享的,实际物理磁盘上只读层只存储了一份,所以容器内的统计不等于物理磁盘的实际占用。

先解决当前磁盘满的问题

  1. 清理Docker冗余资源:
    • 清理未使用的镜像(包括悬空镜像):
      docker image prune -a -f
      
    • 清理已停止的容器:
      docker container prune -f
      
    • 清理未使用的卷和网络:
      docker volume prune -f
      docker network prune -f
      
  2. 清理容器日志:
    容器日志默认无轮转机制,会持续占用磁盘空间。找到对应容器的日志文件(路径为/var/lib/docker/containers/<容器ID>/<容器ID>-json.log),执行命令清空:
    truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
    
    永久解决可修改Docker配置文件/etc/docker/daemon.json,添加日志轮转规则(修改后重启Docker服务生效):
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m",
        "max-file": "3"
      }
    }
    

扩容前的确认

用docker system df确认Docker实际占用的物理空间,结合df -h的结果判断是否真的需要扩容:

  • 如果清理后磁盘空间足够,无需扩容;
  • 若确实需要扩容EBS卷,先在AWS控制台调整卷的大小,再在Ubuntu实例上扩展文件系统:
    sudo growpart /dev/nvme0n1 1
    sudo resize2fs /dev/nvme0n1p1
    

内容的提问来源于stack exchange,提问作者jlmt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:16:13