docker容器日志清理

时间:2023-01-24 14:55:11


最近发现linux(Centos 7)虚拟机的空间不够了,想创建新的容器都失败。剩下不到100M。之前还有好几个G。然后每天不定期查看磁盘空间,发现不断被蚕食。今天比昨天就少了100M;然后下午比上午又少了50M。谁在吞噬服务器的硬盘空间?

docker。准确地说,是docker容器里跑的java程序,不断在产生日志。进入容器目录里查看,可以看到日志文件约800M。是一个日志文件,太夸张了。这个虚拟机上跑了好几个docker容器。

docker容器日志清理


目前的解决办法是参照​​网上教程​​,制作一个脚本,手动运行,将docker容器上所有的日志都清零。下面是详细介绍,包括每日如何查看硬盘空间。

1、查看硬盘空间

df -Th

docker容器日志清理


从中可知,消耗最多的是/dev/mapper/centos-root。其实就是操作系统的根目录。转到操作系统根目录,然后看哪些目录占空间最多

su
cd /
du -h -x --max-depth=1

docker容器日志清理

2、根据昨天与今天查看硬盘空间占用情况的对比

可知是目录var在不断膨胀。

同理不断细化,可知是 /var/lib/docker 的问题。

3、不断深入

最后确认是每个容器内的日志惹的祸

docker容器日志清理

4、制作一个sh文件,

名曰 clean_docker_log.sh,内容为:

#!/bin/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 ========"
# chmod +x clean_docker_log.sh
# ./clean_docker_log.sh

然后运行这个批处理文件,即可将所有的docker容器内的日志瞬间清零。不亦快哉。

5、运行这个批处理文件

sudo sh clean-docker-log.sh

6、小结

docker容器的日志,不是docker产生的。容器只是一个容器,它不搞这些东西。日志都是承载在容器里的应用自己产生的。

运行批处理文件,手动删除日志,治标不治本。韭菜割不尽,春风吹又生;千金散尽还复来,一行白鹭上西天。而且日志删掉,在开发环境可以,生产环境是应该至少保留一段时间的。教程推荐的做法是使用docker compose,可以设置日志最大尺寸。这个东东我目前还不熟悉,所以先不搞。

网上教程:
​​​Docker容器日志查看与清理​