Linux centos /var/lib/docker/container目录导致系统存储爆满,占用大量存储解决方案
在实践应用的docker的过程中,某一天突然发现磁盘被沾满,使用df -h命令和du -sh命令逐级查看发现撑爆磁盘的文件为docker生成的/var/lib/docker/containers的文件。
而docker生成的这些文件中占用空间最大的是*-json.log文件。而此文件的内容为docker生成的日志文件。首先核查该文件是否有用,如果有用可先进行备份,然后进行文件内容的清除。
清除方法有两种,第一种直接删除该文件,但因为该文件在docker运行时有程序占用,因此可能无法清除。因此可进行需要重启docker程序。
另外一种方案就是使用:cat /dev/null > *-json.log命令进行清除,这样不需要重启docker,只是把该文件的内容清空。
但需要注意的是,无论以上两种清除方法的哪一种,清除之后,docker依旧会继续产生日志,因此要做好定时备份、清除的工作。
其中*-json.log文件的目录路径类似以下目录路径:
/var/lib/docker/containers/f2a8646430bd5c5bb09cd67240e9363c28fa8498097db047287425ad56ab5330
如果是在aws服务下,清除时需要使用root角色,可先使用命令sudo -i 切换。
脚本处理
如果针对此问题经常出来,手动每次进行清理特别麻烦,可采用脚本来进一步改进。比如设置一个查看的脚本docker_log_size.sh:
echo "======== docker containers logs file size ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do ls -lh $log done
同时,也可以通过脚本来清理:clean_docker_log.sh
echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========"
当然,更进一步也可以配合定时任务来进行处理,不过关键日志丢失等问题。这里就不再举例说明了。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接