日志轮转与大小控制
容器日志持续增长会占满磁盘,下面介绍日志轮转与大小控制方法。
日志轮转配置
容器级别
Bash
# 运行容器时配置
docker run -d \
--name my-app \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
my-app
参数说明:
max-size:单个日志文件最大大小max-file:保留的日志文件数量
全局配置
JSON
// /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
轮转机制
YAML
日志文件轮转示例(max-size=10m, max-file=3):
my-app-json.log # 当前日志(写入中)
my-app-json.log.1 # 上一次轮转
my-app-json.log.2 # 上上次轮转
# 超过 max-file 的旧日志被删除
当日志达到
max-size时,当前日志重命名为.1,依次类推,超过max-file的删除。
计算磁盘占用
Bash
总磁盘占用 = max-size × max-file
示例:
max-size = 10m
max-file = 3
总占用 = 10m × 3 = 30m(每容器)
Compose 配置
Bash
version: '3.8'
services:
app:
image: my-app
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
日志标签
Bash
# 添加标签区分容器
docker run -d \
--name my-app \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
--log-opt labels=production_status \
--log-opt env=os,customer \
my-app
监控日志大小
Bash
# 查看日志文件大小
ls -lh /var/lib/docker/containers/*/
# 查看磁盘使用
docker system df
# 查看卷和日志使用
docker system df -v
清理日志
手动清理
JSON
# 停止 Docker
sudo systemctl stop docker
# 清理日志
sudo rm -rf /var/lib/docker/containers/*/*.log
# 启动 Docker
sudo systemctl start docker
清理日志前必须停止 Docker,否则日志文件被占用无法删除。
自动清理
JSON
# 定时清理脚本(crontab)
#!/bin/bash
# /etc/cron.daily/docker-log-cleanup
find /var/lib/docker/containers/ -name "*.log" -size +50M -delete
推荐配置
开发环境
JSON
{
"log-opts": {
"max-size": "50m",
"max-file": "5"
}
}
生产环境
text
{
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
日志集中化(ELK)
text
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "localhost:24224"
}
}
要点总结
max-size限制单个日志文件大小,max-file限制保留文件数- 总磁盘占用 = max-size × max-file,合理配置防止占满
- 容器级别和全局均可配置,Compose 通过
logging配置 - 清理日志前必须停止 Docker,否则文件被占用
- 生产环境建议 10m × 3 = 30m 每容器
📝 发现内容有误?点击此处直接编辑