你的硬盘被 Docker 容器日志爆掉了吗?
问题来了
今天下午,我在群里「疯狂」被 @,奶油葡萄又双叒叕访问不了啦!?
怎么肥事
首先,我试了试其它服务,发现能够正常访问。
然后,我通过 Portainer 查看奶油的网站和伺服服务,都在正常工作。为了确保 Portainer 没有「隐瞒真相」,我登录上了其中一个主节点,发现服务确实正常运行,而且各节点也均在线。
然后,我想到其它服务没有使用 Redis,会不会是奶油的 Redis 挂了呢?首先访问奶油一个静态页面,正常工作。再访问一个测试页面(测试 MySQL 数据库和 Redis 的读写性能),发现确实连不上 Redis。
很好,到这个时候,就要真相大白了吗?内心想着一定是 AOF Rewrite 又 GG,然后把磁盘爆了。一顿操作之后,发现重写功能正常着呢。
不过,磁盘确实爆了!持续 du
操作之后,定位到了是奶油伺服服务的容器中的日志文件把磁盘爆了。
怎么解决
根据官方文档,Docker 默认会获取所有容器的标准输出/错误,并以 JSON 格式记录下来。虽然官方文档没有说日志的存储上限,但根据实际使用情况来看,应该是硬盘空间有多少用多少!
But,文档中也是有提供配置方法,用来限制日志大小的!如果你希望全局设置限制,修改 deamon.json
文件,将以下配置内容加入,并根据自身情况修改。保存之后,重启 Docker 生效。
1 | { |
除了全局配置之外,也可以在运行容器时,通过 --log-opt
选项实现容器日志的独立配置。
1 | docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash |
更多的选项,就看看 官方文档 吧!
完美收官
其中一台 VPS,限制之前的磁盘使用为 93%,限制之后为 35%,效果感人!
1 | Filesystem Size Used Avail Use% Mounted on |