目录
Docker logs 命令教程:查看容器日志(-f、--tail、--since)
docker logs 显示容器主进程的输出。调试流程见查看日志与调试。
语法
docker logs [参数] 容器
参数
| 参数 | 说明 |
|---|---|
-f, --follow | 持续显示新日志,按 Ctrl+C 停止 |
-n, --tail 数字 | 只显示最后 n 行(默认 all) |
-t, --timestamps | 在每行前添加时间戳 |
--since 时间 | 只显示某个时间之后的日志,例如 10m、2h、2026-10-14T08:00:00 |
--until 时间 | 只显示某个时间之前的日志 |
--details | 显示额外的详细信息(启动时通过 --log-opt 添加的标签等) |
示例
示例容器每秒向 stdout 输出 line N,向 stderr 输出 error N,共输出 5 次:
docker run -d --name logger alpine:3.23 sh -c 'for i in 1 2 3 4 5; do echo line $i; echo error $i >&2; sleep 1; done; sleep 600'
全部日志、最后几行、添加时间
$ docker logs logger
line 1
error 1
line 2
error 2
line 3
error 3
error 4
line 4
error 5
line 5
$ docker logs --tail 2 logger
error 5
line 5
$ docker logs -t --tail 2 logger
2026-10-13T05:28:48.681587356Z error 5
2026-10-13T05:28:48.681659184Z line 5
- 不加参数会显示全部日志,stdout 和 stderr 交错出现,顺序按时间排列。
--tail 2只查看最后 2 行,日志很多时一定要加上。-t会添加 Docker 记录的时间(UTC),精确到纳秒。
最近一段时间
$ docker logs --since 3s logger
error 4
line 4
error 5
line 5
--since 3s 只显示最近 3 秒的日志。排查“刚才发生了什么”时,它比 --tail 更准确。
stdout 和 stderr
$ docker logs logger 2>/dev/null
line 1
line 2
line 3
line 4
line 5
$ docker logs logger 2>&1 | grep error
error 1
error 2
error 3
error 4
error 5
docker logs会将容器的 stdout 和 stderr 分别发送到终端的 stdout 和 stderr。2>/dev/null丢弃 stderr,只留下line。- 要用
grep搜索错误信息,必须先用2>&1将 stderr 合并到 stdout,否则管道只会收到 stdout,什么也找不到。
持续跟踪
$ timeout 3 docker logs -f --tail 1 logger
line 5
-f 会持续等待新日志,搭配 --tail 1 时,会先显示最后一行再开始跟踪。这里用 timeout 3 让命令在 3 秒后自动结束,平时按 Ctrl+C 停止。Compose 中对应的命令是 docker compose logs -f 服务名称。
相关章节
- 查看日志与调试
- docker compose 命令:
docker compose logs - 清理硬盘空间:日志大小上限
动手练习
练习:显示 logger 容器最近 1 分钟内包含 error 的日志,并添加时间戳。
答案
docker logs -t --since 1m logger 2>&1 | grep error
常见问题
docker logs 没有任何输出?
docker logs 只收集容器主进程写入标准输出(stdout)和标准错误(stderr)的内容。如果程序将日志写入文件(例如 /var/log/app.log),就要用 docker exec 读取该文件,或让程序改为输出到 stdout。
Python 程序的日志延迟很久才出现?
Python 在没有终端时会缓冲输出。设置环境变量 PYTHONUNBUFFERED=1 即可实时输出,参见 [Python 应用](/zh/docker/python/)。
docker logs | grep 找不到明明存在的错误信息?
错误信息通常写入 stderr,而管道 | 只传递 stdout。应该写成 docker logs 容器 2>&1 | grep 关键字。
日志太大,占用硬盘空间怎么办?
设置日志大小上限(--log-opt max-size=10m --log-opt max-file=3),实际测试见 [清理硬盘空间](/zh/docker/cleanup/)。
更新于 2026年10月14日