Appearance
Docker 容器日志查看指南
想要在 Docker 中精准地查看指定片段的日志,而不是被海量的控制台输出淹没,可以根据时间范围、行数或者关键词来进行过滤。
以下是几种最常用的进阶用法:
1. 按时间段查看 (--since & --until)
如果你知道问题发生的大致时间,这是最有效的方法。你可以使用绝对时间(ISO 格式)或相对时间。
- 查看最近 30 分钟内的日志:
docker logs --since 30m <container_name> - 查看指定日期之后的日志:
docker logs --since "2026-04-09T14:00:00" <container_name> - 查看某段特定时间内的日志(起始与结束):
docker logs --since "2026-04-09T10:00:00" --until "2026-04-09T11:00:00" <container_name>
2. 按行数查看 (--tail)
如果你只想看最后一部分日志,或者结合 -f (follow) 实时监控,可以使用 tail。
- 只看最后 100 行:
docker logs --tail 100 <container_name> - 从最后 50 行开始实时滚动更新:
docker logs -f --tail 50 <container_name>
3. 结合 grep 过滤关键词
Docker logs 本身不支持 grep 参数,但你可以通过管道符将输出传递给系统的 grep 工具。
注意: 很多容器会将日志输出到
stderr。为了确保 grep 能抓到所有内容,通常建议先执行2>&1。
- 搜索包含 "Error" 的日志:
docker logs <container_name> 2>&1 | grep "Error" - 搜索关键词并显示匹配行的前后各 5 行(上下文):
docker logs <container_name> 2>&1 | grep -C 5 "NullPointerException"
4. 配合 timestamps 排查
有时候日志本身不带时间戳,导致你很难对齐报错点。加上 -t 参数可以让 Docker 强制显示每行日志的产生时间:
docker logs -t --since 5m <container_name>
总结常用组合
如果你遇到一个突发报错,想看过去 10 分钟内包含 "Exception" 的日志,最强命令组合如下:
bash
docker logs --since 10m <container_name> 2>&1 | grep -i "exception"小贴士: 如果日志量实在太大导致终端卡死,建议将日志重定向到文件中再慢慢分析: docker logs <container_name> > debug_log.txt 2>&1