维护测试环境的时候发现磁盘使用达到100%从而导致服务异常,排查磁盘占用原因发现是docker的累计日志占用过大的,因此查阅相关资料进行配置维护并记录。
1.背景知识
Docker 是一个开源的应用容器引擎,允许开发者将应用以及依赖打包到一个可移植的容器中,并发布到任何流行的 Linux 或 Windows 机器上。由于 Docker 提供了隔离应用和底层系统的抽象层,因此应用可以在各种环境中一致地运行。然而,在运行 Docker 容器时,会产生大量日志,如果不加以管理,可能会占满主机的存储空间。
Docker 默认使用 json-file 作为其日志驱动,但并未设置日志文件的大小上限,也就是说,如果不进行额外配置,Docker 日志会持续增长,直到耗尽所有可用的磁盘空间。
2.具体配置方法
方法一:使用 —log-opt 参数
在启动容器时,可以使用 --log-opt
参数设置日志驱动程序的选项。通过该参数,我们可以限制容器日志的大小。
示例命令:
docker run -d --name example-container --log-opt max-size=500m --log-opt max-file=3 nginx:latest
max-size=500m
:限制单个日志文件的最大大小为 500MB。max-file=3
:限制日志文件的数量为 3 个。
当日志文件达到 500MB 时,Docker 会自动轮换日志文件,保留最新的 3 个日志文件。
日志json-file记录驱动程序支持以下日志记录选项:
选项 | 描述 | 示例值 |
---|---|---|
max-size | 滚动之前日志的最大大小。一个正整数加上表示测量单位的修饰符(k 、m 或g )。默认为 -1(无限制)。 | --log-opt max-size=10m |
max-file | 可以存在的日志文件的最大数量。如果滚动日志会产生多余的文件,则最旧的文件将被删除。仅当也设置时才有效。max-size 正整数。默认为 1。 | --log-opt max-file=3 |
labels | 启动 Docker 守护进程时适用。该守护进程接受的与日志记录相关的标签的逗号分隔列表。用于高级日志标记选项。 | --log-opt labels=production_status,geo |
labels-regex | 与 类似并兼容labels 。用于匹配与日志记录相关的标签的正则表达式。用于高级日志标记选项。 | --log-opt labels-regex=xxxxx |
env | 启动 Docker 守护进程时适用。该守护进程接受的与日志记录相关的环境变量的逗号分隔列表。用于高级日志标记选项。 | --log-opt env=os,customer |
env-regex | 与 类似并兼容env 。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标记选项。 | --log-opt env-regex=^xxxxx |
compress | 切换旋转日志的压缩。默认为disabled . | --log-opt compress=true |
方法二:修改 Docker daemon 配置文件
可以修改 Docker daemon 配置文件为所有容器设置默认的日志大小限制。配置文件的位置根据您的操作系统而异
- Ubuntu 和 Debian:/etc/docker/daemon.json
- CentOS:/etc/sysconfig/docker
示例配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "500m",
"max-file": "3"
}
}
保存并关闭配置文件后,需要重启 Docker 服务以使更改生效。现在,所有新启动的容器都将遵循配置文件中定义的日志大小限制。$\color{red}{注意:该配置只对新容器生效,已经创建了的容器不生效,需要重新删除后再创建!!!}$
systemctl restart docker
评论 (0)