Docker日志大小限制配置

jupiter
2024-04-17 / 0 评论 / 8 阅读 / 正在检测是否收录...

维护测试环境的时候发现磁盘使用达到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滚动之前日志的最大大小。一个正整数加上表示测量单位的修饰符(kmg)。默认为 -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

参考资料

  1. Docker 控制容器日志大小的方法 - 知乎 (zhihu.com)
  2. 限制 Docker 日志大小:配置与实践-百度开发者中心 (baidu.com)
  3. docker容器日志大小限制-CSDN博客
0

评论 (0)

打卡
取消