一台小服务器上安装了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
文章评论