发布于 2026-01-06 0 阅读
0

如何为 Docker 容器设置日志轮换

如何为 Docker 容器设置日志轮换

原文发布于水手长博客


我们都需要木材!

有时使用Docker会让我感觉像在操作一个黑盒子,尤其是在使用社区提供的Docker镜像时,如果结果不如预期,更是如此。很多情况下,查看日志会耗费大量调试时间。

本文介绍如何为Docker容器设置日志轮换。

默认日志记录驱动程序

我们可以为容器配置不同的日志驱动程序,默认情况下,容器的stdoutstderr会写入位于/var/lib/docker/containers/[container-id]/[container-id]-json.log的 json 文件中。如果不加以维护,它可能会占用大量磁盘空间,如下所示。

一个大型的 JSON 格式日志文件

手动清除日志

如果此 json 日志文件占用大量磁盘空间,我们可以使用以下命令将其清除。

truncate -s 0 <logfile>
Enter fullscreen mode Exit fullscreen mode

我们可以设置一个定时任务来定期清除这些 json 日志文件,但从长远来看,最好设置日志轮换。

设置日志轮换

配置默认日志记录驱动程序

这可以通过在/etc/docker/daemon.json 文件中添加以下值来实现。如果该文件不存在,请创建该文件。

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "10"
  }
}
Enter fullscreen mode Exit fullscreen mode

json文件日志驱动程序还有一些其他选项,我们甚至可以切换到其他日志驱动程序,例如syslog。更多信息,请参阅Docker 文档 - 配置日志驱动程序

执行以下命令以重新加载更新后的daemon.json文件。重启后,新配置将应用于所有新创建的容器。

$ systemctl daemon-reload

$ systemctl restart docker
Enter fullscreen mode Exit fullscreen mode

为容器配置日志驱动程序

如果不想全局应用配置,也可以在容器级别进行配置。

docker run 命令

我们可以在docker run命令中指定日志驱动程序和选项。例如:

$ docker run \
    --log-driver json-file \
    --log-opt max-size=10m \
    --log-opt max-file=10 \
    alpine echo hello world
Enter fullscreen mode Exit fullscreen mode

使用 docker-compose

日志驱动程序和选项也可以使用 docker-compose 进行配置。例如:

version: '3.2'
services:
  nginx:
    image: 'nginx:latest'
    ports:
      - '80:80'
    logging:
      driver: "json-file"
      options:
        max-size: "1k"
        max-file: "3"
Enter fullscreen mode Exit fullscreen mode

确认设置是否正常。

日志被分解成 1000 个文件。

概括

虽然默认设置运行良好,但你永远无法预料容器日志何时会占用所有磁盘空间,而上述几个步骤可以避免这种情况。此外,日志是一项重要的资产,它不仅在出现问题时有用,还包含许多隐藏的价值。因此,千万不要丢弃日志。

如果您正在寻找日志管理 SaaS 解决方案,不妨考虑使用Boatswain,我们可以帮助您管理所有日志并监控您的Docker服务器。💫

事实不足总是会带来危险。

信息不足总是会带来危险。——
斯波克(《星际迷航》)

文章来源:https://dev.to/ykyuen/how-to-setup-log-rotation-for-docker-container-4alp