Docker日志管理实用方法
docker logs命令可快速获取容器日志,常用选项包括:-f(实时跟踪日志)、--tail(仅显示最后N行,如--tail 10)、--since(显示指定时间后的日志,如--since "2025-09-01")、--until(显示指定时间前的日志)。例如,docker logs -f --tail 20 my_container可实时查看容器最新20行日志。json-file驱动(将日志存储为JSON文件),可通过--log-driver选项为单个容器指定驱动(如docker run --log-driver=syslog),或在/etc/docker/daemon.json中全局配置(如{"log-driver": "json-file"})。修改全局配置后需重启Docker服务(systemctl restart docker)。日志轮转是防止日志文件无限增长的关键,主要通过max-size(单个日志文件最大大小)和max-file(保留的日志文件数量)参数实现:
/etc/docker/daemon.json,添加log-opts字段,例如:{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}}(每个日志文件最大10MB,保留3个文件)。修改后重启Docker生效,所有新容器将自动应用此策略。--log-opt参数指定,例如:docker run -d --name my_nginx --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 nginx:latest(仅对该容器生效)。docker-compose.yml文件的logging字段中设置,例如:services:
web:
image: nginx:latest
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
该配置对Compose项目中的所有服务生效。docker inspect <container_id>查看LogConfig字段,确认max-size和max-file是否生效;或直接查看日志文件路径(docker inspect --format='{{.LogPath}}' <container_name>),观察文件大小和数量变化。对于生产环境,建议使用集中式日志管理工具,实现日志的统一收集、存储和分析:
input为beats或tcp),存储到Elasticsearch,再通过Kibana进行可视化分析。可使用Docker Compose快速部署ELK,例如:version: '3'
services:
elasticsearch:
image: elasticsearch:7.10.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
logstash:
image: logstash:7.10.0
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5044:5044"
kibana:
image: kibana:7.10.0
ports:
- "5601:5601"
配置Logstash的logstash.conf文件,添加Docker日志输入和Elasticsearch输出。forward输入),转发到Elasticsearch或其他存储。例如,Fluentd配置文件fluent.conf:<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match docker.*>
@type elasticsearch
host localhost
port 9200
logstash_format true
flush_interval 10s
</match>
启动Fluentd后,在Docker容器启动时指定--log-driver=fluentd --log-opt fluentd-address=localhost:24224,即可将日志发送到Fluentd。stdout和stderr(Docker默认捕获这两个流的日志),而非直接写入文件。例如,在Node.js应用中,使用console.log或winston库输出到stdout;在Python应用中,使用logging模块配置StreamHandler输出到stdout。DEBUG(输出详细信息),生产环境建议使用INFO或WARN(减少不必要的日志),避免日志文件过大。例如,在Spring Boot应用中,通过application.properties设置logging.level.root=INFO。若内置json-file驱动无法满足需求,可使用logrotate工具(Linux系统自带)进行日志轮转。创建/etc/logrotate.d/docker-container配置文件,例如:
/var/lib/docker/containers/*/*.log {
rotate 3
size 10M
copytruncate
missingok
notifempty
compress
delaycompress
}
该配置表示:当日志文件大小达到10MB时进行分割,最多保留3个文件,使用copytruncate(不重启容器的情况下轮转日志,可能丢失少量数据)。