- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
在使用 Docker 的过程中,很多运维人员都会遇到这样的问题:
服务器运行正常
磁盘空间突然告警
检查后发现:
df -h
输出:
Filesystem Size Used Avail Use%
/dev/vda1 100G 96G 4G 96%
继续排查:
du -sh /var/lib/docker/*
结果发现:
85G /var/lib/docker/containers
最终定位:
Docker容器日志持续增长
导致磁盘被写满
本文介绍 Docker 日志机制、日志清理方法以及生产环境最佳实践。
默认情况下:
docker inspect nginx
输出:
{
"LogPath": "/var/lib/docker/containers/xxxx/xxxx-json.log"
}
查看:
ls -lh /var/lib/docker/containers/*/*.log
示例:
-rw-r----- 1 root root 12G nginx-json.log
-rw-r----- 1 root root 18G java-json.log
-rw-r----- 1 root root 25G api-json.log
这些日志文件会持续增长。
查看日志驱动:
docker info | grep Logging
输出:
Logging Driver: json-file
默认驱动:
json-file
日志格式:
{
"log":"request success\\n",
"stream":"stdout",
"time":"2026-06-30T08:00:00.123456789Z"
}
Docker 会将:
stdout
stderr
全部写入日志文件。
统计所有容器日志:
find /var/lib/docker/containers \\
-name "*.log" \\
-exec du -h {} \\;
按大小排序:
find /var/lib/docker/containers \\
-name "*.log" \\
-exec du -m {} \\; \\
| sort -nr
查看前10个:
find /var/lib/docker/containers \\
-name "*.log" \\
-exec du -m {} \\; \\
| sort -nr \\
| head
快速定位问题容器。
查看日志:
docker logs nginx
清空日志:
truncate -s 0 \\
/var/lib/docker/containers/容器ID/*-json.log
例如:
truncate -s 0 \\
/var/lib/docker/containers/7c12ab34/*-json.log
验证:
ls -lh /var/lib/docker/containers/7c12ab34/
日志立即归零。
错误操作:
rm -f *-json.log
原因:
Docker仍然持有文件句柄
磁盘空间不会立即释放
查看:
lsof | grep deleted
示例:
dockerd 1234 root REG deleted
正确方式:
truncate -s 0 logfile
或者重启容器。
生产环境必须限制日志大小。
运行容器:
docker run -d \\
--name nginx \\
--log-driver json-file \\
--log-opt max-size=100m \\
--log-opt max-file=5 \\
nginx
参数:
参数 | 说明 |
max-size | 单个日志文件大小 |
max-file | 保留日志文件数量 |
效果:
nginx-json.log
nginx-json.log.1
nginx-json.log.2
nginx-json.log.3
nginx-json.log.4
超过限制自动轮转。
编辑:
vim /etc/docker/daemon.json
配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
重启:
systemctl restart docker
验证:
docker info
查看:
Logging Driver: json-file
新容器自动生效。
Docker 官方推荐:
local
配置:
{
"log-driver": "local"
}
创建容器:
docker run -d \\
--log-driver local \\
nginx
优势:
占用空间更小
自动压缩
读取效率更高
适用于绝大多数生产环境。
配置:
docker run -d \\
--log-driver=syslog \\
--log-opt syslog-address=udp://192.168.1.100:514 \\
nginx
日志流向:
Container
│
▼
Docker
│
▼
Syslog
│
▼
日志服务器
适合:
大型集群
多节点环境
统一日志分析
日志采集架构:
Container
│
▼
Filebeat
│
▼
Logstash
│
▼
Elasticsearch
│
▼
Kibana
查看容器日志:
docker logs api-server
Filebeat 配置:
filebeat.inputs:
- type: container
paths:
- /var/lib/docker/containers/*/*.log
实现统一日志检索。
示例:
version: '3'
services:
nginx:
image: nginx
logging:
driver: json-file
options:
max-size: "100m"
max-file: "5"
启动:
docker-compose up -d
自动应用限制。
统计日志总量:
du -sh /var/lib/docker/containers
实时监控:
watch -n 60 "
du -sh /var/lib/docker/containers
"
Prometheus 节点监控:
node_filesystem_avail_bytes
node_filesystem_size_bytes
设置告警:
磁盘使用率 > 80%
磁盘使用率 > 90%
提前处理风险。
适用于紧急情况:
#!/bin/bash
find /var/lib/docker/containers \\
-name "*.log" \\
-exec truncate -s 0 {} \\;
echo "Docker日志清理完成"
执行:
chmod +x clean_docker_log.sh
./clean_docker_log.sh
注意:
会清空所有容器日志
仅建议紧急处理
Docker 守护进程:
{
"log-driver": "local",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
推荐标准:
容器类型 | 单文件大小 | 保留数量 |
Nginx | 100M | 5 |
Java应用 | 200M | 10 |
MySQL | 500M | 10 |
Redis | 50M | 5 |
API服务 | 100M | 10 |
Docker 日志管理是容器运维中最容易被忽视的问题之一。大量生产事故并非因为业务异常,而是由于日志无限增长导致磁盘空间耗尽,最终引发容器重启、数据库故障甚至整个节点不可用。
最佳实践包括:
启用日志轮转
限制日志大小
优先使用 local 驱动
集中化日志管理
监控磁盘空间
定期审查异常日志增长
对于拥有几十台服务器和大量容器的生产环境,建议从容器上线开始就配置日志限制,而不是等磁盘被写满后再进行补救。良好的日志管理策略不仅能够降低故障率,也能显著提升整体运维效率。
售前咨询
售后咨询
备案咨询
二维码

TOP