直接回答:服务器上磁盘满,先 df -h 看是哪个挂载点,再看 docker system df 分清镜像、容器、卷和构建缓存各占多少;构建缓存和容器日志是增长最快的两个,可以放心清。

创作背景:当天部署服务时,发现无法部署,后来经过日志排查后发现服务器磁盘满了,查询资料后进行了清理。话不多说,直接上解决方法。

目前遇到的磁盘占用满的基本都是跟docker有关,测试服务器因为频繁打包,所有缓存可能会占用很多,可以通过下面命令看哪部分占用多

docker system df

结果可能如下

image-20250210094451508

Build Cache就是构建缓存,这个如果占用大可以直接用下面命令清除

docker builder prune --filter until=480h 这里面的480h意思是480小时以前的

如果是容器日志占用空间大可以

truncate -s 0 /var/lib/docker/containers/<container_id>/<container_id>-json.log

操作一:

1.查看磁盘大小: df -h

img

2.直接在最上层进行排序:du -a|sort -rn|head -5 或者**du -am | sort -rn | head -n 20 | awk '{printf "%.0f MB\t%s\n", $1, $2}'**以MB为单位显示前20个

du -sh 文件路径 这样可以查看文件的大小

img

3.然后找到最大的文件删除,ps:你要确定是否可以删除,比如一些.log/.tar等文件都可以直接删除,但是有的文件你就需要看一下是否在使用中:lsof fileName

img

看,第二次查询时返回了相应的pid,这个文件删除就要谨慎了。

4.清除文件以后还要继续df-h,有的人会发现我删除了,但是磁盘却没有任何减少,这就是就有人开始说博主是个骗子,其实还差最后一步。查看已删除空间却没有释放的进程:lsof -n | grep deleted,然后删除(kill -9 pid)。

img

至此,磁盘清理完毕。

操作二:

上面说的是正常的处理流程,如果你的服务器安装了docker,建议你直接先执行下面的命令,

**docker system prune**这个会吧停止的容器也删除,所以删除前可以吧容器都启动起来,然后运行命令,然后再把容器停止掉

命令执行后如果删除的0MB,则代表和docker无关。

但是这样清理会把一些没有在用的容器停掉,从而导致下次启动时没有容器,如果你在启动容器时碰到了:Error response from daemon: driver failed programming external connectivity 这个错误或者一直报没有容器,就需要重启docker服务即可重新生成自定义链DOCKER。输入指令 :systemctl restart docker

  • docker system prune:清理未使用的容器、网络和卷。
  • docker image prune:清理悬空(dangling)镜像。
  • docker container prune:清理所有已停止的容器。

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!