docker overlay文件系统占用100%

Overview

overlay2文件分析

看到占用磁盘空间最大的目录是docker存储根目录下的overlay2目录

1# 可以看到/ver/lib/docker/overlay2占用了100%的磁盘空间
2df -lhT
3
4du -sh  /var/lib/docker/overlay2/*

再查看docker存储根目录下的overlay2目录下哪个目录占用空间最大

1du -s  /var/lib/docker/overlay2/*|sort -rn

找出最大的overlay2子目录:ef129273a3f100feec4970bee90b0b83d9f1b170f6a76668eba9bdcfbf5f4ac8

找到子目录关联的容器

findContainer.sh

 1containerIDList=$(docker ps -aq --no-trunc)
 2echo -n "Enter the target DirectoryName to search and locate around all containers: "
 3read target
 4for containerID in $containerIDList
 5do
 6    b=$(docker inspect $containerID|grep MergedDir|grep $target|wc -l)
 7    containerName=$(docker inspect --format '{{.Name}}' $containerID|awk -F "/" '{print $2}')
 8    if [ $b -ge 1 ];
 9    then
10        echo ""
11        echo  "命中,正在遍历容器:$containerName,结果是命中."
12        echo ""
13    else
14        echo  "未命中,正在遍历容器:$containerName,结果是未命中."
15    fi
16done

执行 sudo sh findContainer.sh,按提示输入:ef129273a3f100feec4970bee90b0b83d9f1b170f6a76668eba9bdcfbf5f4ac8

1# 脚本会输出ef129273a3f100feec4970bee90b0b83d9f1b170f6a76668eba9bdcfbf5f4ac8关联的容器ID

进入容器,然后找到对应的大日志文件,清空日志:

1sudo cat /dev/null > xxxx.log
2# 或者
3sudo sh -c 'cat /dev/null > xxxx.log'

container日志分析

1for i in $(docker ps -q ); do 
2        echo "ContainerID: $i"; 
3        ls -alh $(docker inspect $i | grep LogPath|awk -F "\"" '{print $4}');
4done;

上面的这条命令会打印出每个正在运行的容器标准输出日志占用的磁盘空间,可以选择超过一定体积(比如 1G)的日志文件情况,情况的方式可以很粗暴:

1echo "" > xxx-json.log
2# 或者
3cat /dev/null > xxxx-json.log