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

注意: 由于该配置仅仅对新建的 容器 生效,因此需要将原来的 容器 删除,重新创建;