首页/云/云与容器速查/docker logs 查看容器日志
容器与 Docker106 条

docker logs 查看容器日志

读取容器 stdout/stderr 日志(json-file 驱动时本地可读):-f 跟随、--tail 尾部、--since 时间范围,是容器排障第一入口。

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

docker logs 是干什么的

docker logs 读取容器主进程写到标准输出与标准错误的日志,是容器排障的第一个入口。它支持实时跟随、只看尾部若干行、按时间范围读取与加时间戳,但它的能力受日志驱动限制:默认驱动会把日志留在本机可读,换成其他驱动后可能就要去日志系统里查了。

基本信息

基本语法docker logs [选项] 容器
常用参数-f 实时跟随 / --tail N 只看最后 N 行 / -t 显示时间戳 / --since 时间范围
日志来源容器主进程及其子进程写到标准输出与标准错误的内容
日志驱动默认按行保存到本机文件;也可转发到日志系统或直接丢弃
轮转默认不轮转,需显式配置单文件大小与文件数量上限
不可读情况驱动被设为只转发或丢弃时,命令行读不到历史日志

典型使用场景

  • 服务起不来时看启动报错:配置错误、端口占用、依赖连不上都会在这里暴露
  • 发布后验证:跟随日志观察请求是否正常处理,确认没有异常堆栈
  • 崩溃复盘:容器反复重启时,配合上一次运行的日志定位崩溃原因
  • 按时间窗定位:用时间范围参数只看故障发生那几分钟的输出
  • 写入文件留证:把日志导出到文件,供后续分析或提交工单
  • 确认日志是否真的在输出:日志为空时先排除应用把日志写到文件里的可能

常用参数速查

参数作用使用注意
-f实时跟随输出排查结束后要主动退出,否则一直挂着
--tail 200只看最后 200 行不加时可能一次刷出巨量历史日志
-t每行加时间戳与业务日志自带时间对照可判断时区问题
--since 30m只看最近 30 分钟定位故障时间窗时最省事
--until截止某个时间与 since 配合可截取固定区间
--timestamps等价于 -t不同版本参数名略有差异

常用示例

常用示例
docker logs --tail 200 myapp                    # 看最后 200 行
docker logs -f --tail 100 myapp                 # 实时跟随,先给 100 行上下文
docker logs --since 30m myapp                   # 只看最近 30 分钟
docker logs -t myapp | tail -n 50               # 带时间戳看尾部
docker logs myapp > /tmp/myapp.log 2>&1         # 导出到文件留证
# 日志为空时先确认应用是否把日志写到了容器内文件而没走标准输出
默认日志驱动不做轮转:长期运行且输出量大的容器会把磁盘写满,进而拖垮同机所有服务。应在守护进程配置里设置单文件大小与保留文件数,或改用日志系统收集。
容器日志只覆盖主进程的输出:应用若把日志写到容器内文件,命令行读不到,需要进入容器查看或用日志收集工具采集。
看崩溃现场要用上一次运行的日志:容器重启后当前实例的日志是空的,排查时要指定读取上一实例的输出。
日志时间戳能帮上大忙:把容器日志时间与应用日志时间对照,可以快速判断时区配置是否与实际一致。

长期运行的日志治理

  • 为日志设置单文件大小与保留数量,避免磁盘被逐步写满
  • 接入集中日志系统,容器重建后历史日志仍然可查
  • 统一日志格式与时间戳,跨服务串联排查才可行
  • 把关键错误做成告警,不必依赖人工定时翻日志

易错点

  • 应用把日志写文件而不写标准输出,命令行读不到还以为是没日志
  • 日志不设上限,磁盘被日志写满,容器与宿主服务一起异常
  • 崩溃排查只看当前实例日志,重启后的空白输出让人误判为无报错
  • 在生产上直接跟随输出排查,忘了退出导致终端长期被占用
  • 把所有容器日志都堆在同机磁盘,故障时既写不下也来不及收集

数据来源与参考

  • Docker Docs:docker logs
  • Docker Docs:日志驱动配置

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌