背景介绍
下午 5:30,差不多到点打卡下班,准备好零食饮料,放松一下准备下班,然后...
CI 构建失败,经典的一幕!!!
无法从镜像仓库拉取镜像,docker 正常运行,为什么拉不到镜像呢?除非...
磁盘满了!!!
一番检查过后,发现 /var/lib/docker 目录使用了大部分磁盘,200GB 左右。但是服务器上只有 4 个镜像,运行了 2 个容器,没有挂载。是什么把磁盘用完了呢?
日志,非常多的日志!!!
问题分析
默认情况下,docker 使用 json-file 日志驱动来记录日志,docker 没有限制单个容器的日志文件大小,也没有限制日志文件个数。容器一直运行,日志文件就会一直变大,直到磁盘空间被用完。另外,json-file 驱动一般会把日志保存在以下路径:
/var/lib/docker/containers/{CONTAINER-ID}-json.log
幸运的是,有两种方式解决这个问题。
解决方法
一、通过启动命令
docker run --log-opt max-size=10m --log-opt max-file=5 IMAGE-NAME:TAG
上述指令限制单个容器最多可以有 5 个日志文件,而且每个文件的最大大小为 10Mb,因此,该容器的日志文件最大大小为 50Mb。
如果使用 docker compose,可以参考以下内容进行日志大小限制:
app:image: IMAGE-NAME:TAGlogging:driver: "json-file"options:max-file: 5max-size: 10m
二、通过 daemon.json
通过启动指令的方式只能限制单个容器的日志大小,如果想要全局限制,则需要使用方法二。
在 /etc/docker/daemon.json 中添加以下内容:
{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "5" }
}
然后重启 docker:
systemctl daemon-reload
systemctl restart docker
参考总结
以上就是本文希望分享的内容,如果大家有什么问题,欢迎在公众号 - 跬步之巅留言交流。
原创不易,觉得不错还请一键三连,您的支持是我持续输出的最大动力。