在实践应用的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 ========"

当然,更进一步也可以配合定时任务来进行处理,不过关键日志丢失等问题。这里就不再举例说明了。

Linux centos /var/lib/docker/container目录导致系统存储爆满,占用大量存储解决方案插图


Linux centos /var/lib/docker/container目录导致系统存储爆满,占用大量存储解决方案插图1

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2019/09/15/linux-centos-var-lib-docker-container%e7%9b%ae%e5%bd%95%e5%af%bc%e8%87%b4%e7%b3%bb%e7%bb%9f%e5%ad%98%e5%82%a8%e7%88%86%e6%bb%a1%ef%bc%8c%e5%8d%a0%e7%94%a8%e5%a4%a7%e9%87%8f%e5%ad%98%e5%82%a8%e8%a7%a3/