满屏栈被 docker logs 卡住那晚,我把参数挨个摸了一遍

接着上一篇〈docker exec 进不去:OCI runtime exec failed〉说,容器进不去,就只剩 docker logs 在门外捞日志这条路。

偏偏那台 CentOS 7.9 上的 pay-gw 一崩就是满屏堆栈,我敲下 docker logs pay-gw,终端直接僵住,等它吐完,最早那几行报错早滚没影了。 Docker 20.10.7。

先只揪尾巴那几十行

排障九成时候,我要的就是最后那五十行:

$ docker logs --tail 50 pay-gw

配上时间戳,好跟旁边几个容器对时间线:

$ docker logs -t --tail 2 pay-gw
2026-09-21T09:14:02.338145771Z ERROR 1 --- [  main] c.z.hikari.pool.HikariPool  : HikariPool-1 - Connection is not available, request timed out after 30000ms
2026-09-21T09:14:02.401189223Z  ... 30 more

底下那二十几行 at 我截了,跟第一篇里那段一个样。

按时间段切,两头都能卡

--since 和 --until 各管一头,窗口自己定:

$ docker logs --since 10m pay-gw
$ docker logs --since "2026-09-21T09:10:00" --until "2026-09-21T09:15:00" pay-gw

想盯着新日志出来,加 -f,和 tail -f 一个意思:

$ docker logs -f --tail 20 pay-gw

屏实在太多,就 pipe 给 less 慢慢翻,别硬截:

$ docker logs --tail 500 pay-gw 2>&1 | less

那个 2>&1 基本跑不掉。 logs 把 stdout 和 stderr 分两路收,不加这行,less 里就看不到报错那半截。

翻的时候是 less 那套键,空格下一页,/null 往下搜关键字,g 跳回顶,q 退。

参数名和来源这两个坑

没有 --line,也没有 -n。 -n 是 kubectl logs 的写法,docker 这边只认 --tail。

还有个坑我踩实过: logs 只收标准输出和标准错误,应用自己在容器里往文件里写的那一份,这儿一条也看不见。 想看得进容器翻文件去,可这镜像又没带 tail,绕回之前那圈了。

时间戳那八小时

时间戳这串走的是 UTC,跟本地差八小时。 --since 那串不带时区时它按本地时间算,我拿它对过两回,对完才发现对不上。

posted @ 2026-10-23 20:03  kaka的程序人生  阅读(4)  评论(0)    收藏  举报