最近发现linux(Centos 7)虚拟机的空间不够了,想创建新的容器都失败。剩下不到100M。之前还有好几个G。然后每天不定期查看磁盘空间,发现不断被蚕食。今天比昨天就少了100M;然后下午比上午又少了50M。谁在吞噬服务器的硬盘空间?
docker。准确地说,是docker容器里跑的java程序,不断在产生日志。进入容器目录里查看,可以看到日志文件约800M。是一个日志文件,太夸张了。这个虚拟机上跑了好几个docker容器。
目前的解决办法是参照网上教程,制作一个脚本,手动运行,将docker容器上所有的日志都清零。下面是详细介绍,包括每日如何查看硬盘空间。
1、查看硬盘空间
df -Th
从中可知,消耗最多的是/dev/mapper/centos-root。其实就是操作系统的根目录。转到操作系统根目录,然后看哪些目录占空间最多
su
cd /
du -h -x --max-depth=1
2、根据昨天与今天查看硬盘空间占用情况的对比
可知是目录var在不断膨胀。
同理不断细化,可知是 /var/lib/docker 的问题。
3、不断深入
最后确认是每个容器内的日志惹的祸
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容器日志查看与清理