Docker在Ubuntu上的日志管理指南
基础查看命令
使用docker logs命令查看指定容器的日志(将<container_id_or_name>替换为实际容器标识):
docker logs <container_id_or_name>
-f或--follow参数,实时查看日志输出(类似tail -f);--tail N参数,仅显示最后N条日志(如--tail 10显示最后10条);--since和--until参数,按时间范围筛选日志(如--since "2025-09-01" --until "2025-09-25")。查看Docker引擎自身日志
journalctl命令查看Docker服务日志:sudo journalctl -u docker.service
添加-n 100可显示最近100条日志,-f可实时跟踪。/var/log/upstart/docker.log,使用cat或tail查看:cat /var/log/upstart/docker.log
sudo tail -f /var/log/upstart/docker.log
Docker默认使用json-file驱动(日志存储为JSON格式文件),可通过修改守护进程配置调整日志行为:
编辑配置文件
打开或创建/etc/docker/daemon.json,添加以下内容:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m", // 单个日志文件最大大小(如10MB)
"max-file": "3" // 保留的旧日志文件数量(超过则轮转)
}
}
支持的其他驱动:syslog(发送到系统日志)、journald(集成systemd日志)、fluentd(发送到Fluentd收集器)等。
重启Docker生效
修改配置后,重启Docker服务使设置生效:
sudo systemctl restart docker
避免日志文件无限增长占用磁盘空间,可通过以下两种方式实现轮转:
Docker内置轮转(推荐)
通过daemon.json中的log-opts配置(如上述),适用于json-file驱动。修改后,Docker会自动轮转日志文件(如container_id-json.log.1、container_id-json.log.2.gz等)。
系统级logrotate配置
编辑/etc/logrotate.d/docker(若不存在则创建),添加以下规则:
/var/lib/docker/containers/*/*.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(gzip)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 640 root root # 创建新日志文件的权限
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
/usr/bin/kill -USR1 $(cat /var/lib/docker/containers/*/*.log.pid 2>/dev/null) 2>/dev/null || true
endscript
}
保存后,logrotate会自动按规则轮转Docker容器日志。
对于生产环境,建议使用集中式日志管理工具,实现日志收集、分析、可视化:
ELK Stack(Elasticsearch+Logstash+Kibana)
apt或官方文档安装Elasticsearch、Logstash、Kibana;/etc/logstash/conf.d/docker.conf,添加Docker日志输入(如beats或file插件)和Elasticsearch输出;/var/lib/docker/containers/*/*.log)并发送到Logstash,最终在Kibana中可视化。Fluentd
sudo apt install fluentd;/etc/fluent/fluent.conf,添加Docker输入(forward插件监听24224端口)和Elasticsearch输出:<source>["是", "Docker Fluentd配置示例", "Fluentd Docker input配置", "Fluentd Elasticsearch output配置"]</source>
sudo systemctl start fluentd;--log-driver=fluentd和--log-opt fluentd-address=localhost:24224。若使用Docker Compose管理容器,可在docker-compose.yml中为服务配置日志驱动:
version: '3'
services:
web:
image: nginx
logging:
driver: "json-file" # 日志驱动(默认为json-file)
options:
max-size: "10m" # 单个日志文件最大大小
max-file: "3" # 保留的旧日志文件数量
保存后,运行docker-compose up -d启动服务,日志将按配置管理。