记一次容器日志写满造成的服务异常,并设置docker 限制容器日志大小

关键词:nginx没有日志,接口异常

容器日志造成的服务异常

现象
在一次调试文件上传接口的时候发现不选择文件接口能够调通,但是选择了文件就报错 nginx 404,于是就去服务端查看nginx日志,发现无论接口调用成不成功nginx都没有日志,我确定服务都是经过nginx转发过去的。于是重启nginx容器发现问题:

docker: Error response from daemon: mkdir /var/lib/docker/overlay2/9a5d71ff3b21501cef92e7593b6fe7c72da669f7f929d7d0756175ee96eb2c99-init: no space left on device.

发现是磁盘空间不足,查看宿主机磁盘空间 df -h


image.png

发现是容器nginx日志将磁盘空间占满

进入 /var/lib/docker/containers 目录执行 du * -sh
image.png

发现磁盘空间使用最大的容器挂载目录进入将日志文件清掉,启动nginx服务就恢复了
删除24969b6a5a37d687cfc6223d5cb6f8af7ad3a0c9e95e5fdd15019ed479edfc0f-json.log 文件


image.png

设置docker 限制容器日志大小

选项描述
max-size 切割之前日志的最大大小。可取值为(k,m,g), 默认为20m。 --log-opt max-size=10m

max-file 可以存在的最大日志文件数。如果超过最大值,则会删除最旧的文件。**仅在max-size设置时有效。默认为5。 --log-opt max-file=3

compress 对应切割日志文件是否启用压缩。默认情况下启用。 --log-opt compress=false

创建/etc/docker/daemon.json如果已经存在则不用创建


image.png
  • 增加log-opts参数
"log-driver":"json-file",
  "log-opts":{ "max-size" :"3g","max-file":"2"}

加载配置文件并重启docker
重启docker

systemctl  daemon-reload
systemctl  restart docker

验证
执行 docker info 发现Storage Driver 的变化

Logging Driver: journald
Cgroup Driver: systemd
变为
Logging Driver: json-file
Cgroup Driver: cgroupfs

image.png

执行 docker inspect 容器id查看容器信息发现限制配置已经生效


image.png

限制单个容器日志大小可以查看我另一篇文章
地址: https://www.jianshu.com/p/1d24cdab5b38

【完成】