关键词: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

发现是容器nginx日志将磁盘空间占满
进入 /var/lib/docker/containers 目录执行 du * -sh

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

设置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如果已经存在则不用创建

- 增加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


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

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