一台小服务器上安装了docker,跑了几个container,没过一阵子发现磁盘空间不够了,查了一下,主要是docker安装了gitlab-ce,这个容器产生的日志特别多,一天能有几百MB,在这个文件夹下:
/var/lib/docker/containers/7daa91c2495dec29ebac0ba77d1b4bf9e665e20f10f504ed02dbfaea94c3d7b5/7daa91c2495dec29ebac0ba77d1b4bf9e665e20f10f504ed02dbfaea94c3d7b5-json.log
虽然按照官方的docker的文件,配置了日志最大文件大小和数量(/etc/docker/daemon.json):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
但是好像没有效果,索性写了一个定时脚本,扫描/var/lib/docker/containers下所有的日志文件,当日志文件达到一定的大小(100MB),就清空日志文件。
文件放在:/opt/docker_log_cleanup.sh
内容如下(注释说明也写着):
#!/bin/bash
# 设置日志文件的最大大小(以字节为单位)
# 当前设置为100MB,您可以根据需要调整
MAX_SIZE=$((100 * 1024 * 1024))
# 查找所有的Docker日志文件并处理
find /var/lib/docker/containers/ -name '*-json.log' | while read -r log_file; do
# 获取文件大小
file_size=$(stat -c %s "$log_file")
if [ "$file_size" -gt "$MAX_SIZE" ]; then
echo "清理日志文件: $log_file"
# 清空文件内容,但保留文件
truncate -s 0 "$log_file"
fi
done
echo "日志清理完成"
给脚本增加权限:
chmod +x /opt/docker_log_cleanup.sh
编辑定时任务:
crontab -e
内容如下(每天凌晨2点执行):
0 2 * * * /opt/docker_log_cleanup.sh
文章评论