前言

在排查docker问题的时候,查看日志是非常重要的一步,下面看看如何方便的使用docker日志。

docker查看日志的方式

  • ‌查看完整日志‌
docker logs <容器名或容器ID>直接输出容器启动以来的所有日志。‌
  • ‌查看尾部日志‌
docker logs --tail 500 <容器名>仅显示最近 500 条日志,避免信息过载。
  • ‌按时间筛选‌
docker logs --since 1h <容器名>过滤最近 1 小时的日志,适合定位近期问题。‌
按照时间范围进行查询
docker logs --since "2025-07-09T00:00:00" --until "2025-07-09T12:00:00" <容器ID>

实时追踪日志

docker logs -f <容器名>
docker logs -f --tail 100 <容器名> # 实时跟踪最后100条日志

过滤日志

过滤日志可以配合grep进行查询
docker logs <容器ID> | grep "错误关键词" # 过滤含特定关键词的行 docker logs <容器ID> | grep -C 20 "超时" # 显示关键词前后20行

grep过滤日志不生效

使用docker log时输出的日志比较多,因此需要进行过滤,但是我使用grep过滤日志时一直无效。
实现可能有下面的原因

1.日志输出到 stderr 导致过滤失败

容器日志可能输出到标准错误(stderr),而管道默认只处理 stdout
docker logs <容器> 2>&1 | grep "关键词"

2.日志驱动格式不兼容

  • ‌现象‌:grep 无法匹配日志内容
  • ‌原因‌:Docker 使用非默认日志驱动(如 journald、syslog),导致日志格式变化。
  • ‌解决‌:
    • 检查日志驱动:docker inspect <容器> --format='{{.HostConfig.LogConfig.Type}}'
    • 若需原始日志,直接查看 JSON 日志文件:
cat /var/lib/docker/containers/<容器ID>/*-json.log | grep "关键词"

3. 日志包含二进制或颜色代码‌

  • ‌现象‌:报错 grep: (standard input): binary file matches
  • ‌原因‌:日志中含二进制数据(如颜色控制符)。
  • ‌解决‌:
bashCopy Code docker logs <容器> --no-color | grep --text "关键词"
--no-color 禁用颜色代码,--text 强制 grep 处理二进制内容。

‌4. 关键词匹配问题‌

  • ‌排查步骤‌:
  1. 确认关键词存在:docker logs <容器> > log.txt 后手动检查文件。
  2. 检查大小写:grep -i 忽略大小写。
  3. 使用正则表达式:grep -E "error|fail" 匹配多模式。‌

‌5. 其他注意事项‌

  • ‌容器未重启‌:修改配置后需重启容器生效(如 Redis 的 requirepass 配置)。‌
  • ‌权限问题‌:确保有权限读取容器日志(需 sudo 或用户加入 docker 组)。‌
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐