服务器因 docker 日志占用空间不足

本文记录服务器因 docker 日志占用空间不足的处理过程。

问题处理

启动项目提示找不到缓存文件,登录界面验证码刷不出来

登录服务器重启 docker 后台服务,报错

Error response from daemon: Cannot restart container my-serve: open /var/lib/docker/containers/9988633862afc28bc8764e39a8772f6376298e5d74479226e9a98c05b9e32ce4/hash3450992418: no space left on device

提示空间不足,查看磁盘空间,发现有一个磁盘完全满了

1
df -h

查看 docker 日志大小

1
du -sh /var/lib/docker/containers/*/*-json.log

发现有一个大日志文件占用了近一半的空间
查找是哪个容器生产的日志

1
2
# 上面输出的 /var/lib/docker/containers/<容器完整ID>/
docker ps -a --no-trunc | grep <CONTAINER_ID>

停止服务

1
docker stop the-log-serve

删除或清空日志文件

1
2
rm /var/lib/docker/containers/<CONTAINER_ID>/<CONTAINER_ID>-json.log
sudo truncate -s 0 /var/lib/docker/containers/0ad56ed2d47a.../*-json.log

启动服务

1
2
docker start the-log-serve
docker start my-serve

大日志轮转处理(待完善)

使用 Linux 自带的 logrotate 配置日志轮转

1
vi /etc/logrotate.d/docker-containers

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
/var/lib/docker/containers/*/*.log {
daily
rotate 7
# 保留最近7份旧日志
size 100M
compress
delaycompress
missingok
copytruncate
dateext
dateformat -%Y%m%d
notifempty
}

参考资料