linux容器日志查看核心是 docker logs 命令和直接访问宿主机json.log 文件;单容器用 docker logs - f 及 –tail/–since 等参数精准追踪,多容器用 docker-compose logs 或for 循环 批量查看,定位后可用 grep、less等 工具 高效搜索分析。

Linux 容器日志查看核心就两条路:用 docker logs 直接读取标准输出,或直接访问宿主机上的日志文件。多容器场景下,关键不是“全查”,而是“精准定位 + 分层追踪”。
单个容器实时日志:docker logs -f 最常用
先确认容器名或 ID:
- docker ps 查看正在运行的容器列表
- docker ps -a 查看包括已退出的容器
然后用 docker logs 查看:
- docker logs -f nginx —— 实时跟踪(Ctrl+C 退出)
- docker logs -f –tail=100 nginx —— 只显示最新 100 行再持续追加
- docker logs -f –since 15m nginx —— 查最近 15 分钟的日志
- docker logs -tf –tail=50 nginx —— 带时间戳 + 最新 50 行
多个容器批量追踪:docker-compose logs 或脚本组合
如果你用 Docker Compose 启动服务,最省事的是:
- docker-compose logs -f —— 查看所有服务日志(混在一起)
- docker-compose logs -f web api —— 只跟踪指定服务
- docker-compose logs -f –tail=200 web —— 指定服务 + 初始行数
没用 Compose?可以写一行命令快速轮询多个容器:
- for c in $(docker ps –format “{{.Names}}”); do echo “== $c ==”; docker logs –tail=10 $c 2>/dev/NULL | head -5; done
这能帮你快速扫一遍各容器最近几行,判断哪个异常。
定位日志物理位置:直接读 json.log 文件
Docker 默认用 json-file 驱动,每条日志实际存在宿主机上:
- 先查路径:docker inspect –format='{{.LogPath}}’ container_name_or_id
- 典型路径:/var/lib/docker/containers/
/ –json.log - 直接查看:tail -f /var/lib/docker/containers/abc123/abc123-json.log
注意:这个文件是 JSON 格式,每行一个日志 对象,含 time、stream、log 等字段。如果想过滤内容,建议配合 jq 或用 grep -o ‘”log”:”[^”]*”‘ | cut -d'”‘ -f4 提取纯文本。
高效搜索与分类技巧:grep + tail + less 组合拳
光看不行,得快速定位问题。几个实用组合:
- 只看错误:docker logs myapp | grep -i -C3 “Error|exception|trace”
- 实时过滤关键词:docker logs -f myapp | grep -i “timeout”
- 查某次请求全链路(假设用了 trace_id):docker logs myapp | grep -C5 “trace_id=abc123”
- 翻页浏览大日志:docker logs myapp | less,进入后按 /ERROR 搜索,n 下一条,q 退出
小技巧:用 -C10 显示上下文,比单行 grep 更容易判断上下文是否异常;加 -i 忽略大小写,避免漏掉“Error”和“ERROR”。
基本上就这些。不复杂但容易忽略的是:别只盯着 -f,该用 --since 和 --tail 控制范围,该导出时就导出分析——日志太多时,屏幕刷屏反而掩盖重点。