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
有没有更好的方法清理docker文件的方法呢
没去找其他的方法,一般都是单独拿出一台 build sever,这样直接删除也不会影响其他的,如果你找到好的方法记得告诉我
我之前遇到的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
不错,很实用的技巧