docker logs 命令详解:容器日志查看的完整手册

docker logs 命令中文详解:-f 实时跟踪、--tail 按行截取、--since/--until 时间过滤、--timestamps 时间戳、--details 附加信息、多容器组合技巧与局限,以及观测云 DataKit 实现跨容器集中检索告警的方案。

最佳实践
docker logs 命令详解:容器日志查看的完整手册技术指南封面

docker logs 是容器排障的第一命令,但它的能力边界也很清晰:单机、单容器、无检索。本文系统讲解 docker logs 的全部选项与组合技巧,并说明什么时候该升级到集中化日志平台。

核心要点速览

  • docker logs 依赖驱动的读取能力或 dual logging 缓存:json-file/local/journald 等支持读取,外送驱动也可能通过缓存可查,需核对实际配置。
  • 四大高频选项:-f 实时跟踪、--tail 只看末尾、--since/--until 按时间窗过滤、-t 补时间戳。
  • stdout 与 stderr 都被捕获:--details 用于显示配置的日志属性(如标签或环境变量),不是流标记开关;TTY 会合并两流。
  • 跨容器排查:统一时间戳和服务标签,并在容器删除前将需要保留的日志送往独立存储。

1. 基础用法

docker logs <容器名或ID>

输出该容器当前保留的 stdout/stderr 日志,已轮转清除的历史无法凭此恢复。容器没在产生日志?可先用 docker run --name log-demo alpine:3.22 sh -c 'printf "example output\n"; printf "example error\n" >&2' 创建明确写入两流的一次性示例,再运行 docker logs log-demo;检查完成后用 docker rm log-demo 仅删除此测试容器。

2. 高频选项组合

docker logs -f myapp                      # 实时跟踪(Ctrl+C 退出)
docker logs --tail 100 myapp              # 只看最后 100 行
docker logs --since 30m myapp             # 最近 30 分钟
docker logs --since 2026-08-25T14:00:00 --until 2026-08-25T15:00:00 myapp
docker logs -t myapp                      # 每行加 ISO-8601 时间戳
docker logs --details myapp               # 显示已配置的日志属性(如标签/环境变量)
docker logs --tail 50 -f -t myapp         # 组合:带时间戳跟踪最近 50 行起的增量

排障典型流程:--since 定位故障时间窗 → 找到关键错误 → 加 -f 复现观察 → 需要更多上下文时加大 --tail。

3. 进阶技巧

# 只过滤错误行(配合 grep)
docker logs myapp 2>&1 | grep -i error

# 丢弃 stderr,仅保留 stdout(非 TTY 容器)
docker logs myapp 2>/dev/null
# 仅保留 stderr 可用 docker logs myapp 1>/dev/null;也会包含 CLI 自身错误。
# 非 TTY 容器可用重定向分离;TTY 已合并两流,且 CLI 自身错误也进 stderr:
docker logs myapp 1>/tmp/out.log 2>/tmp/err.log

# 多个容器轮流看(脚本化)
for c in web-1 web-2 web-3; do docker logs --tail 20 $c; done

4. docker logs 的能力边界

docker logs 适合检查指定容器的日志。跨主机调查时,需要统一时间范围和服务标识;容器删除后的追溯则依赖删除前已外送的数据及其保留策略。集中采集前,先确认实际日志驱动、采集路径和轮转设置。

验证集中采集结果

对挂载到主机的应用日志文件,可按 DataKit 日志采集配置设置路径、source、service 与 Pipeline。stdout/stderr 日志则需要匹配实际容器运行时和驱动的采集方式,不能假定所有驱动都提供相同的可读文件。

用一条带执行编号的请求日志,比较本地输出与观测云日志查看器的时间、消息和容器标识。多行异常要验证合并结果,JSON 日志要验证字段提取;确认没有遗漏或重复后,再按错误级别或关键字设置告警。保留期按服务的追溯需求设置,不由容器生命周期决定。

常见问题(FAQ)

docker logs 报 "configured logging driver does not support reading"?

需检查驱动读取能力及 dual logging 缓存:syslog/fluentd 等外送型驱动在启用兼容缓存时也可本地查询;若无法读取,查看对应后端,不能仅凭驱动类型认定无本地日志。这也是推荐 local 驱动的原因之一:本地可查 + 采集层外送两不误。

--since 和 --until 支持哪些时间格式?

RFC3339(2026-08-25T14:00:00Z)、相对时间(30m、2h、1h30m)、Unix 时间戳。跨时区注意带上时区偏移。

日志文件很大,docker logs 卡住了?

先 --tail 或 --since 缩小范围。长期方案:确认驱动轮转参数(max-size/max-file)生效,需要跨主机检索时再使用已配置的集中采集结果。

容器重启后还能看到重启前的日志吗?

同一容器 restart 后,可读取驱动仍保留的重启前日志;删除重建则是不同容器,历史受驱动与外送保留策略限制。Docker 没有 docker logs --previous,该参数属于 kubectl logs。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台