Docker容器日志管理:限制日志大小、集中收集与Loki接入教程
Docker 日志的隐患:无限增长直到磁盘爆满
Docker 容器默认使用 json-file 日志驱动,日志文件存储在 /var/lib/docker/containers/ 目录下,默认没有大小限制。高流量应用运行几周后,日志文件可能积累数十 GB,直接导致磁盘空间告警甚至服务崩溃。
本文提供从单容器限制到集中收集的完整日志管理方案。
一、快速查看当前日志占用
# 查看所有容器的日志文件大小
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | head -20
# 查看 Docker 整体占用
docker system df -v二、限制单个容器的日志大小
在 docker run 命令中指定日志选项:
docker run -d \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=3 \
--name myapp \
myapp:latest参数说明:
max-size=100m 每个日志文件最大 100MB;max-file=3 保留最近 3 个轮转文件,即最多保留 300MB 日志。
三、在 docker-compose.yml 中统一配置日志策略
version: '3.8'
services:
app:
image: myapp:latest
logging:
driver: json-file
options:
max-size: "100m"
max-file: "3"
nginx:
image: nginx:alpine
logging:
driver: json-file
options:
max-size: "50m"
max-file: "5"四、全局配置 Docker 默认日志策略
修改 Docker daemon 配置,对所有容器生效(无需逐一设置):
sudo nano /etc/docker/daemon.json{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}sudo systemctl restart docker注意:此配置只对重启后的新容器生效,现有容器需要重新创建才会应用新的日志策略。
五、清理已存在的大型日志文件
# 清空指定容器的日志(容器继续运行)
sudo truncate -s 0 /var/lib/docker/containers/容器ID/*-json.log
# 或通过容器名查找日志文件路径
CONTAINER_ID=$(docker inspect --format='{{.Id}}' 容器名)
sudo truncate -s 0 /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log六、接入 Grafana Loki 集中收集日志(进阶)
当服务器数量增多,各容器的日志需要集中收集和检索时,Grafana Loki 是最轻量的方案(比 ELK 栈资源占用低得多)。
安装 Loki Docker 日志驱动插件:
docker plugin install grafana/loki-docker-driver:latest \
--alias loki \
--grant-all-permissions在 docker-compose.yml 中使用 Loki 驱动:
services:
app:
image: myapp:latest
logging:
driver: loki
options:
loki-url: "http://localhost:3100/loki/api/v1/push"
loki-batch-size: "400"
loki-retries: "3"
loki-timeout: "2s"部署 Loki + Grafana 收集和可视化日志:
version: '3.8'
services:
loki:
image: grafana/loki:2.9.0
ports:
- "3100:3100"
volumes:
- loki_data:/loki
restart: unless-stopped
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=your_grafana_password
volumes:
- grafana_data:/var/lib/grafana
restart: unless-stopped
volumes:
loki_data:
grafana_data:总结
Docker 日志管理的优先级排序:
- 立即配置
/etc/docker/daemon.json全局日志限制,防止磁盘耗尽 - 对高流量容器单独配置更小的 max-size
- 定期清理历史大文件
- 规模化后接入 Loki 实现集中收集和检索
IDC.Net 香港云服务器和独立服务器均支持 Docker 部署,SSD 硬盘保障 I/O 性能,CN2 GIA 直连大陆,支付宝付款即可开通。
版权声明:
作者:后浪云
链接:https://idc.net/help/442550/
文章版权归作者所有,未经允许请勿转载。
THE END
