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