容器日志查看
Docker 默认的 json-file 日志驱动把容器的标准输出与错误输出按行写到宿主机 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log,每行是一个含 log 与 time 字段的 JSON 对象。它的价值在于:容器内不落盘的应用输出,往往只在这份日志里留下痕迹。
基本信息
| 路径 | /var/lib/docker/containers/<容器ID>/<容器ID>-json.log |
|---|---|
| 行格式 | 每行一个 JSON 对象,含 log 与 time 字段 |
| time 格式 | 带时区的 RFC 3339 时间 |
| 查询命令 | docker logs 支持 --since、--until、--tail |
| 生命周期 | 容器删除后日志目录一并消失 |
| 权限要求 | 读取容器日志目录需要 root |
典型使用场景
- 查看容器应用的标准输出与错误输出
- 按时间窗提取某次事件的相关输出
- 判断容器何时启动与退出
- 与容器内的审计记录互相印证
- 分析已被删除容器的日志残留
最小示例
最小示例
docker ps --no-trunc | head # 取得完整容器 ID
docker logs --since '2026-01-02T03:00:00' --until '2026-01-02T06:00:00' <容器> | head -40
tail -5 /var/lib/docker/containers/<ID>/<ID>-json.log 2>/dev/null
docker inspect <容器> | grep -i -E 'StartedAt|FinishedAt'
ls -l /var/lib/docker/containers/ | head # 目录概览
sha256sum /var/lib/docker/containers/<ID>/<ID>-json.log 2>/dev/null要素与注意
| 要素 | 含义 | 注意 |
|---|---|---|
| log 字段 | 该行输出的文本 | 多行输出会被转义在同一行里 |
| time 字段 | 带时区的 RFC 3339 时间 | 与宿主机时区可能不同 |
| 容器 ID 目录 | 按容器组织的日志目录 | 容器删除后目录随之消失 |
| StartedAt 与 FinishedAt | 容器起止时刻 | 用于框定日志时间窗 |
| 日志驱动 | 决定日志存储位置 | 非 json-file 时路径不同 |
json-file 驱动下每行含 log 与 time 两个字段,time 为带时区的 RFC 3339 格式,换算后可直接并入时间线。
使用 journald 等其它日志驱动时,日志不会落在上述目录,需要改从宿主机的日志系统查询。
日志驱动可以在容器创建时指定,也可以在守护进程配置中统一设定;排查前先确认当前实际使用哪一种。
容器日志里常包含应用打印的口令、令牌与个人信息,采集后展示或写入报告前都要按脱敏规则处理。
容器被删除后日志目录随之消失;需要长期留证时应在容器生命周期内复制到证据目录并计算哈希。