首页/云/Docker 容器速查/docker logs 时间过滤 --since/--until
基础命令50 条

docker logs 时间过滤 --since/--until

按时间窗口查看日志:--since 支持相对时长,--until 截断上界,配合 --tail 与 -t 时间戳,适合事故回溯。

Docker 容器速查云更新于 2026-10-13

日志时间过滤是什么

按时间窗口查看容器日志:起始时间可以写成相对时长,也可以写成完整的时间点,配合结束时间与末尾行数限制,就能把一次事故的时间段单独摘出来。它解决的是日志量太大、翻不动的问题。

基本信息

起始时间支持相对时长,例如最近半小时;也支持完整时间点
结束时间限定窗口上界,与起始时间配合使用
行数限制只取末尾若干行,和起始时间可以同时使用
时间戳输出时可在每行前加时间戳,便于与监控对齐
时间基准采用容器内进程写出日志时的时间记录

典型使用场景

  • 事故回溯:把故障发生前后的时间窗单独取出来分析
  • 发布验证:只看重启之后的时间段,确认新版本是否引入报错
  • 定时巡检:取最近一段时间的错误输出,判断服务是否稳定
  • 对比分析:同一服务的两个实例取相同时间窗,排查是全局问题还是单实例问题
  • 避开噪声:长时间跑的服务只取感兴趣的时间段,日志量可控

常用示例

常用示例
docker logs --since 30m web                                   # 最近半小时
docker logs --since 2h --until 1h web                         # 两小时前到一小时前
docker logs --since 2026-10-12T08:00:00 --until 2026-10-12T09:00:00 web  # 绝对时间窗
docker logs -t --tail 50 web                                  # 末尾五十行并带时间戳
docker logs --since 10m web 2>&1 | grep -i error | tail -30     # 时间窗内筛错误

参数组合效果

组合含义使用提醒
起始时间加行数限制先按时间过滤,再取末尾若干行两者不冲突,可以放心一起用
起始与结束时间取一个闭合时间窗结束时间早于起始时间会得不到结果
相对时长以当前时刻往前推算单位秒、分、时都要写清楚
完整时间点按绝对时刻过滤带时区写更稳妥,避免与宿主时间基准错位
加时间戳输出每行前显示记录时间便于与监控图表逐条对齐

定位误差的来源

  • 容器内时区与宿主不一致,看到的时间与本地直觉有偏差
  • 应用输出带缓冲,日志记录时刻晚于事件实际发生时刻
  • 日志轮转把窗口起点之前的记录删掉,看起来像服务没有输出
  • 多实例日志混在一起时先按实例分开取,避免时间线互相干扰
  • 相对时长以命令执行时刻为基准,长时间命令的输出窗口会随之变化
相对时长的单位要写全:单个数字加单位,例如十秒、十分钟、一小时,只写数字的语义在不同版本里有差异,明确写单位最稳。
取不到期望区间的日志时先确认时间基准:容器时区、宿主时区与日志本身的时间戳三者不一致是常见原因,先核对再怀疑应用。

易错点

  • 时间窗取不到内容就认为服务没输出,实际是时区不一致或日志已被轮转删除
  • 应用输出带缓冲,日志时间晚于事件发生时间,用时间窗排查时对不上因果
  • 只写数字不写单位,时间范围与预期不符
  • 在多个实例上分别取日志却混在一起看,时间线互相干扰,结论失真

数据来源与参考

  • Docker 官方 CLI 参考:docker logs(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌