docker容器安装在/var/lib/docker/containers目录下,发现他的*-json.log的文件很大,需要把这个日志文件清空,我又不敢直接删除,怕删除了就不能在生成这个文件了,我就写一个空值到日志文件,而且容器个数很多,手动执行是不可能的,我就写了个简单的批量清空docker容器日志的脚本
docker日志文件的结构如下:
[root@host ~]# ll /var/lib/docker/containers/e13ed5ebc94e5c910d651e86eee7089d5268b4f2681521a13584f1554d92df0d
total 104K
drwxrwxrwx 2 root root 4.0K Mar 10 15:11 checkpoints
-rwxrwxrwx 1 root root 3.7K Mar 14 08:30 config.v2.json
-rwxrwxrwx 1 root root 680M Jun 7 23:24 e13ed5ebc94e5c910d651e86eee7089d5268b4f2681521a13584f1554d92df0d-json.log
-rwxrwxrwx 1 root root 1.6K Mar 14 08:30 hostconfig.json
-rwxrwxrwx 1 root root 13 Mar 14 08:30 hostname
-rwxrwxrwx 1 root root 174 Mar 14 08:30 hosts
drwxrwxrwx 2 root root 4.0K Mar 10 15:11 mounts
-rwxrwxrwx 1 root root 133 Mar 14 08:30 resolv.conf
-rwxrwxrwx 1 root root 71 Mar 14 08:30 resolv.conf.hash
在/var/lib/docker/containers/这个目录下面是各容器的目录,一串很长的字符,在容器里面的日志的有一段是跟上层目录的是一致的,后面的-json.log,在每个容器里面都是一样的。
#!/bin/bash
#将/var/lib/docker/containers目录下的目录都找出来存到logsdir.txt这个里面
ls /var/lib/docker/containers >/newdata/package/logsdir.txt
#循环读取logsdir.txt的值到dir变量
while read dir
do
#再将包含日志的文件夹里面的内容都重定向到files.txt
ls /var/lib/docker/containers/$dir >/newdata/package/files.txt
#循环读取files.txt的内容到file变量
while read file
do
#拼接日志文件
houzhui="-json.log"
log=$dir$houzhui
#只是日志文件名写到test.txt里面核对下,可以不要
echo $log > /newdata/package/test.txt
#判断哪个文件是日志文件,是日志文件就写空值进去
if [ $file == $log ];then
echo "" >/var/lib/docker/containers/$dir/$file
fi
done < /newdata/package/files.txt
done </newdata/package/logsdir.txt