如何为 Docker 容器设置日志轮换
原文发布于水手长博客。
我们都需要木材!
有时使用Docker会让我感觉像在操作一个黑盒子,尤其是在使用社区提供的Docker镜像时,如果结果不如预期,更是如此。很多情况下,查看日志会耗费大量调试时间。
本文介绍如何为Docker容器设置日志轮换。
默认日志记录驱动程序
我们可以为容器配置不同的日志驱动程序,默认情况下,容器的stdout和stderr会写入位于/var/lib/docker/containers/[container-id]/[container-id]-json.log的 json 文件中。如果不加以维护,它可能会占用大量磁盘空间,如下所示。
手动清除日志
如果此 json 日志文件占用大量磁盘空间,我们可以使用以下命令将其清除。
truncate -s 0 <logfile>
我们可以设置一个定时任务来定期清除这些 json 日志文件,但从长远来看,最好设置日志轮换。
设置日志轮换
配置默认日志记录驱动程序
这可以通过在/etc/docker/daemon.json 文件中添加以下值来实现。如果该文件不存在,请创建该文件。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "10"
}
}
json文件日志驱动程序还有一些其他选项,我们甚至可以切换到其他日志驱动程序,例如syslog。更多信息,请参阅Docker 文档 - 配置日志驱动程序。
执行以下命令以重新加载更新后的daemon.json文件。重启后,新配置将应用于所有新创建的容器。
$ systemctl daemon-reload
$ systemctl restart docker
为容器配置日志驱动程序
如果不想全局应用配置,也可以在容器级别进行配置。
docker run 命令
我们可以在docker run命令中指定日志驱动程序和选项。例如:
$ docker run \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=10 \
alpine echo hello world
使用 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"
确认设置是否正常。
概括
虽然默认设置运行良好,但你永远无法预料容器日志何时会占用所有磁盘空间,而上述几个步骤可以避免这种情况。此外,日志是一项重要的资产,它不仅在出现问题时有用,还包含许多隐藏的价值。因此,千万不要丢弃日志。
如果您正在寻找日志管理 SaaS 解决方案,不妨考虑使用Boatswain,我们可以帮助您管理所有日志并监控您的Docker服务器。💫
文章来源:https://dev.to/ykyuen/how-to-setup-log-rotation-for-docker-container-4alp信息不足总是会带来危险。——
斯波克(《星际迷航》)



