docker logs命令docker logs是查看容器日志的核心工具,适用于大多数日常场景。常用选项如下:
docker logs <容器ID或名称>(如docker logs web_server)。-f或--follow选项,类似tail -f,实时显示最新日志(如docker logs -f db_container)。--tail指定显示最后N行(如docker logs --tail=100 app_container,仅看最后100行)。--since(起始时间)和--until(结束时间)筛选,时间格式支持相对时间(如5m表示5分钟前)或绝对时间(如2025-10-01T12:00:00)(如docker logs --since="2025-10-20" --until="2025-10-21" nginx_container)。-t或--timestamps选项,每行日志前添加UTC时间戳(如docker logs -t mysql_container),便于时间顺序分析。若需查看Docker守护进程本身的日志(而非容器日志),可使用journalctl命令:
sudo journalctl -u docker.service。-f选项,实时跟踪Docker服务日志(如sudo journalctl -u docker.service -f)。-n指定数量(如sudo journalctl -u docker.service -n 50,显示最近50条)。grep筛选特定日志(如错误信息),-i忽略大小写:docker logs <容器ID> | grep -i "error"(查找容器中的错误日志)。grep和wc -l统计错误出现次数:docker logs <容器ID> | grep -i "error" | wc -l(统计错误日志行数)。json-file驱动),用jq工具提取特定字段(如level为error的日志):docker logs <容器ID> | jq '. | select(.level == "error")'(仅显示错误级别的JSON日志)。awk提取日志中的关键字段(如HTTP状态码),并统计分布:docker logs <容器ID> | awk '/HTTP/{print $9}' | sort | uniq -c | sort -nr(统计HTTP状态码出现次数,按频率降序排列)。Docker支持多种日志驱动,默认使用json-file(将日志保存为JSON文件)。可通过以下方式配置:
/etc/docker/daemon.json(若文件不存在则创建),添加以下内容:{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m", // 单个日志文件最大10MB
"max-file": "3" // 最多保留3个日志文件(当前+2个轮转)
}
}
重启Docker服务使配置生效:sudo systemctl restart docker。syslog:将日志发送到宿主机的syslog系统(适用于集中管理);fluentd:发送到fluentd收集器(支持多源日志聚合);none:不记录日志(不推荐用于生产环境)。对于生产环境,建议使用**ELK Stack(Elasticsearch + Logstash + Kibana)**集中管理多个容器的日志,实现可视化分析与快速排查。
docker run -d --name elasticsearch -e "discovery.type=single-node" -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:7.14.0)。docker run -d --name logstash -v /path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -p 5000:5000 docker.elastic.co/logstash/logstash:7.14.0)。docker run -d --name kibana -e "ELASTICSEARCH_URL=http://elasticsearch:9200" -p 5601:5601 docker.elastic.co/kibana/kibana:7.14.0)。logstash.conf文件,定义输入(Docker日志文件)、过滤(解析JSON)、输出(Elasticsearch):input {
file {
path => "/var/lib/docker/containers/*/*.log" // Docker默认日志路径
type => "docker"
codec => "json" // 解析JSON格式日志
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"] // 连接到Elasticsearch
index => "docker-logs-%{+YYYY.MM.dd}" // 按日期创建索引
}
}
http://<服务器IP>:5601,配置索引模式(如docker-logs-*),即可通过可视化图表(如折线图、柱状图)分析日志趋势(如错误率、请求量)。max-size和max-file限制日志文件大小与数量,避免磁盘空间耗尽。{"level":"info","message":"User logged in","timestamp":"2025-10-21T12:00:00Z"}),便于后续解析与分析。