docker日志过大问题处理
查找日志过大文件
进入 /var/lib/docker/containers 文件夹该
文件夹需要 root 用户权限,因此需要先使用 su 命令切换到 root 用户;
$ cd /var/lib/docker/containers
使用 du -sh * | sort -hr 命令查看文件夹大小
$ du -sh * | sort -hr
694G cf48cf9218785067a367042e38c81e675952d7d39d47e3234a2dfab4c81a1051
11M ebfcd5e88b2dad4e14c52e7666e4bdff979ade9cf29ba1911ccf2628725a1c10
7.6M e65619bf8df39d023b3b6215d7167de2e0a83d527498e7600edb11de1fd68c3b
3.7M d6bb50b02d0e8e1ffb4efb37804614fa66403d324126d8cf36ca42f5a5b799c4
1.8G a21a41ddf958fd24d7f9d441a5229eb4dd40ff96b47503d73c3e980b4741ebb3
1.7G a0e13aeb7a6f9ca192595e761c55791f455531edd4a010ea3fd079538fb9140d
进入第一个最大尺寸的文件夹,可以看到 *-json.log 文件,一般就是这个文件比较大,需要清理;
$ du -sh * | sort -hr
694G cf48cf9218785067a367042e38c81e675952d7d39d47e3234a2dfab4c81a1051-json.log
28K config.v2.json
12K hostconfig.json
4.0K resolv.conf.hash
4.0K resolv.conf
4.0K mounts
4.0K hosts
4.0K hostname
4.0K checkpoints
不要使用 rm 命令删除,因为该文件一直被 docker 占用,所以无法使用 rm 进行正常删除,使用 cat /dev/null > *-json.log 命令删除文件;
$ cat /dev/null > *-json.log
继续使用 du 命令查看文件大小,可以看到 log 文件已经被清空了;
$ du -sh * | sort -hr
28K config.v2.json
12K hostconfig.json
4.0K resolv.conf.hash
4.0K resolv.conf
4.0K mounts
4.0K hosts
4.0K hostname
4.0K checkpoints
0 cf48cf9218785067a367042e38c81e675952d7d39d47e3234a2dfab4c81a1051-json.log
可以写个脚本定时清理,但是并不是最有策略,因为删除的日志是全部日志,一旦删除,最近的日志也没了;
配置docker日志大小
通过编辑 /etc/docker/daemon.json 来控制 docker 日志的默认大小;
{
"log-driver":"json-file",
// 每个文件最大 500m, 最多10个文件
"log-opts": {"max-size":"500m", "max-file":"10"}
}
配置完成后执行
$ systemctl daemon-reload
$ systemctl restart docker
注意: 由于该配置仅仅对新建的
容器生效,因此需要将原来的容器删除,重新创建;