如何减小 Docker 容器的日志文件大小
有一台跑 docker 的服务器,系统告警磁盘满了,经过排查,发现 /var/lib/docker/containers/ 占用了过多的磁盘空间,需要清理一下。
检查
/var/lib/docker/containers/ 目录是 Docker 容器的日志目录,我们可以通过以下的命令,来查看每个容器的日志大小。
1 | docker ps -aq | xargs -I '{}' docker inspect --format='{{.LogPath}}' '{}' | xargs ls -lh |
可以看到类似的内容。
1 | -rw-r----- 1 root root 300G Feb 2 12:01 /var/lib/docker/containers/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7-json.log |
我们发现一个日志已经达到了 300G。需要赶紧清理一下。
备份
如果日志很重要,可以备份一下,例如:
1 | cat /var/lib/docker/containers/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7-json.log | bzip2 --best --compress --stdout /data/backup/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7-json.log.bz2 |
我这机器是一点空间都没有了,就不备份了。
删除日志
我们可以使用 fallocate,比如我们删掉这个文件的前 295G,保留最后的 5G 日志。
1 | fallocate --collapse-range --offset 0 --length 295GiB --verbose /var/lib/docker/containers/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7/10cbdaa6640bfdd065ee4a192f5f455751f36938c0bbac870d75c6648470caa7-json.log |
如何规避
配置一下 docker,限制日志的存储量,并开启滚动存储,以减少日志过度留存。
例如,在 docker-compose.yml 中指定日志配置。
1 | logging: |
或者直接怼到 docker 的全局配置下。
1 | echo '{"log-driver": "json-file", "log-opts": {"max-size": "1024m", "max-file": "1"}}' | jq . > /etc/docker/daemon.json |
然后 restart docker 就大吉了。
文章封面图:@carrier_lost
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 弹霄博科!
评论