通过docker运行nginx服务,把对应nginx的服务日志直接通过
docker logs
显示的日志,主要是基于容器 stdout/stderr来实现。在日志增加的同时,需要考虑日志存储和增长,避免后期磁盘空间被占满。本文简单介绍下这种场景下,如何避免日志无限增长。
一、容器常见日志类型:
Docker daemon.json
日志驱动对比表
日志驱动 (log-driver ) |
特点 | 是否支持 docker logs |
适用场景 | 配置示例 (/etc/docker/daemon.json ) |
---|---|---|---|---|
json-file (默认) | 默认驱动,日志存成 JSON 文件,文件较大,需手动配置轮转 | ✅ 支持 | 开发/小项目 | json\n{\n "log-driver": "json-file",\n "log-opts": {\n "max-size": "10m",\n "max-file": "3"\n }\n}\n |
local | Docker 推荐,高效二进制存储,自动轮转,节省磁盘空间 | ✅ 支持 | 生产/单机服务 | json\n{\n "log-driver": "local",\n "log-opts": {\n "max-size": "10m",\n "max-file": "5"\n }\n}\n |
syslog | 将日志写入宿主机 syslog ,统一日志管理 |
❌ 不支持 | 需要系统日志集中化 | json\n{\n "log-driver": "syslog",\n "log-opts": {\n "syslog-address": "udp://192.168.1.100:514"\n }\n}\n |
journald | 日志写入 systemd ,用 journalctl 查看 |
❌ 不支持 | systemd 系统 | json\n{\n "log-driver": "journald"\n}\n |
fluentd | 推送到 Fluentd,方便集中处理 | ❌ 不支持 | 分布式 / 企业级 | json\n{\n "log-driver": "fluentd",\n "log-opts": {\n "fluentd-address": "localhost:24224"\n }\n}\n |
awslogs | 推送到 AWS CloudWatch Logs | ❌ 不支持 | 云环境 (AWS) | json\n{\n "log-driver": "awslogs",\n "log-opts": {\n "awslogs-group": "my-group",\n "awslogs-region": "us-east-1"\n }\n}\n |
二、处理方案有如下:
- 单个日志文件最大 50 MB
- 最多保留 3 个日志文件(超过后旧的会被删除)
1、容器指令运行:
bash
docker run -d \
--name mynginx \
--log-driver=json-file \
--log-opt max-size=50m \
--log-opt max-file=3 \
nginx
2、docker compose
yaml
version: "3.9"
services:
nginx:
image: nginx:latest
ports:
- "80:80"
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "3"
3、全局修改 Docker 配置
在宿主机修改 /etc/docker/daemon.json
:
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
修改完后重启服务
sudo systemctl restart docker
三、查看容器日志配置情况
ini
docker inspect 容器ID_or_名字 --format='{{.HostConfig.LogConfig}}'
输出结果如下:
arduino
{json-file map[max-size:10m max-file:3]}