docker 清理 /var/lib/docker/aufs 目录

内网服务器上一直用 Docker 来 build 镜像,来进行持续发布,使用一段时间之后,会生成很多文件,如果不及时清理,会占据大量的 inode,虽然磁盘没满,但是无法分配 inode,也会导致一些命令不可用。

查看 inode 数量命令

df -i

如何锁定目录

如果是 / 根目录占满了,怎么确认是哪个子目录呢?使用这条命令依次深入目录执行,查看计算结果,最终就会确认下是哪个目录。

for i in *; do echo $i; find $i | wc -l; done

最后发现是 /var/lib/docker/aufs/diff 这个目录,直接删除 aufs 目录下所有文件,删除 base 镜像,然后重启 docker 服务,清理结束。

cd /var/lib/docker/aufs
rm -r *
docker rmi [你的基础镜像 ID]
service docker restart

不用担心,重启之后会自动重建 diff 目录。
再次执行 df -i 的时候,inode 的百分比已经降下来了。

附加一些批量操作命令:

批量删除镜像

docker images | awk '{print $3}' | xargs docker rmi

批量删除容器

docker ps -a | awk '{print $1}' | xargs docker rm

参考链接:
https://segmentfault.com/q/1010000003106521

评论

  1. hunyxv
    hunyxv

    有没有更好的方法清理docker文件的方法呢

    回复
    1. yusure
      yusure

      没去找其他的方法,一般都是单独拿出一台 build sever,这样直接删除也不会影响其他的,如果你找到好的方法记得告诉我

      回复
      1. hunyxv
        hunyxv

        我之前遇到的docker文件把磁盘占满的原因是,docker把程序的标准输出(stdout)(python 的 print golang的fmt.Println都属于stdout)收集起来作为了日志,所以日志文件越来越大。
        可以通过设置来限制日志文件的大小。
        或换一个日志驱动程序:
        docker daemon 有一个默认的日志驱动程序,默认为json-file;
        json-file 会把所有容器的标准输出和标准错误以json格式写入文件中,这个文件每行记录一个标准输出或标准错误并用时间戳注释;

        http://caf99af3.wiz03.com/share/s/3a-pHP3y4ABk2SLM5t03faoi3yiG_B3iLkdo2aFzWh22Ayif

        回复
  2. 免费网上赚钱
    免费网上赚钱

    不错,很实用的技巧

    回复