You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker镜像拉取后内存占用异常暴涨及磁盘分区高占用问题排查求助

Docker镜像拉取后内存占用异常暴涨及磁盘分区高占用问题排查求助

嘿,这种明明拉了个小镜像却占了巨量磁盘的情况确实挺闹心的,我来帮你梳理下可能的原因和排查解决步骤:

第一步:先锁定是不是Docker在搞事情

首先得确认/dev/nvme0n1p5的高占用是不是Docker相关的,直接用Docker自带的命令看全局占用:

  • 运行 docker system df,这个命令会清晰列出镜像、容器、卷、构建缓存各自的空间占用情况。很多时候不是你刚拉的小镜像的问题,而是之前遗留的未使用容器、冗余镜像或者堆积的构建缓存在偷偷占空间。
  • 如果发现是构建缓存占了大头,直接用 docker builder prune 清理;要是冗余镜像/容器多,用 docker system prune -a 清理(注意:这个命令会删掉所有未被容器使用的镜像和停止的容器,执行前最好确认哪些是你需要保留的)

第二步:排查容器日志爆炸的情况

很多容器运行时会疯狂生成日志,尤其是一些后台服务容器,日积月累能占几十上百G:

  • 你可以去Docker默认的日志目录 /var/lib/docker/containers/ 里,找到对应容器ID的文件夹,查看里面的.log文件大小。如果确实是日志太大,临时救急可以用 truncate -s 0 /var/lib/docker/containers/<容器ID>/*.log 清空日志。
  • 长期解决的话,建议配置Docker日志轮转,编辑 /etc/docker/daemon.json(没有就新建),加入以下配置:
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    
    保存后重启Docker服务:systemctl restart docker,这样日志就会自动限制大小,最多保留3个10M的日志文件。

第三步:检查Docker持久化卷的占用

如果你的容器挂载了持久化卷,卷里可能存了大量数据(比如数据库备份、用户上传的文件):

  • docker volume ls 列出所有卷,然后用 docker volume inspect <卷名> 找到卷在本地的实际路径,再用 du -sh <路径> 查看卷的大小。没用的卷可以直接用 docker volume rm <卷名> 删除。

第四步:排除非Docker的系统占用

毕竟/dev/nvme0n1p5是系统分区,也可能是其他程序在占空间:

  • 先用 df -h 确认这个分区的总占用比例,然后用 du -sh /* 找出根目录下哪个文件夹占空间最大,再逐层深入排查,看看是不是系统日志、其他应用的缓存或者大文件导致的。

另外补充个小知识点:Docker镜像采用分层存储,你看到的小镜像可能依赖了较大的基础镜像,但这种情况一般不会突然占100G,所以大概率还是前面提到的缓存、日志、卷的问题。

一步步排查下来,应该能找到问题根源啦!

备注:内容来源于stack exchange,提问作者xs_william

火山引擎 最新活动