首页/云/Docker 容器速查/docker logs 为空的原因
容器排障52 条

docker logs 为空的原因

logs 为空先分清三类:日志驱动不是 json-file/local、应用把日志写进容器内文件、进程在打印前就退出。

Docker 容器速查云更新于 2026-10-13

logs 为空的三种原因

docker logs 输出为空,通常落在这三类:日志驱动不是 json-file 或 local(例如 none、syslog),容器本来就不把日志写到这里;应用把日志写进了容器内的文件而不是标准输出;进程在打印任何内容之前就退出了。三者现象相似,排查顺序建议是先看驱动与进程状态,再看应用到底把输出写到了哪里。

基本信息

查驱动docker inspect 的 HostConfig.LogConfig.Type
查进程State.Status 与 State.ExitCode
查输出目标应用写标准输出还是容器内文件
特例驱动为 none 时 logs 永远没有内容

典型使用场景

  • 应用升级后日志消失:日志改为写文件,标准输出自然为空
  • 容器启动即退出:进程在初始化阶段就失败,来不及输出
  • 日志被外部系统接管:驱动改为转发到集中式日志服务
  • 排查采集断链:确认容器侧输出与采集侧配置是否一致
  • 容量管理:确认轮转策略是否把历史日志清掉

逐项确认

逐项确认
# 一次拿到驱动、状态与退出码
docker inspect -f 'driver={{.HostConfig.LogConfig.Type}} status={{.State.Status}} exit={{.State.ExitCode}}' web

# 看应用是否把日志写进了容器内文件
docker exec web sh -c 'ls -l /var/log 2>/dev/null | head'

# 直接看底层日志文件(驱动为 json-file 时)
ls -lh /var/lib/docker/containers/*/*-json.log | tail -5

原因与处理

现象原因处理
运行中但 logs 为空日志驱动不是 json-file 或 local改驱动,或在采集侧对接当前驱动
logs 空但容器内有文件应用写文件而非标准输出改为输出到标准输出,或挂卷后采集文件
启动即退出且无输出进程在打印前失败看退出码与启动命令,必要时手动执行同一命令
日志被截断轮转或大小限制生效调整轮转策略与保留份数
容器已退出时无法进入容器查看,文件层面的排查要么在运行中完成,要么把日志目录挂载出来事后查看。
先核对驱动再查应用:驱动为 none 的容器永远不会产生 logs,这一条能省掉大量无效排查。

易错点

  • 默认应用一定会写标准输出:写文件的应用在 logs 里什么都看不到,先确认输出目标
  • 容器退出后才想进容器查看:已退出的容器无法 exec,排查要么在运行中做要么提前挂出日志目录
  • 忽略日志驱动差异:换成集中式驱动后 logs 为空是预期行为,采集侧才是正确入口
  • 只看 logs 不看退出码:进程启动失败的原因常写在退出码与启动命令里

数据来源与参考

  • Docker 官方文档:Logging drivers 与 Viewing logs(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌