命令行
流式契约
NDJSON envelope、命令特定输出、心跳、背压和信号行为。
多个 CLI 命令会消费 daemon stream,但并非所有长时间运行命令都使用相同输出。编写解析器前请检查对应命令的 --help。
Daemon stream envelope
把 daemon stream 公开为 JSON 的命令会在 stdout 每行输出一个 NDJSON envelope,序列号从 0 开始。
{"seq":0,"type":"data","payload":{"line":"hello"}}
{"seq":1,"type":"heartbeat"}
{"seq":2,"type":"dropped","payload":{"count":12}}
{"seq":3,"type":"end"}end 和 error 都是终止帧,同一 stream 只会产生一种终止结果。error payload 包含 code、message 和可选 details。
Daemon 通常每 15 秒发送心跳;连续 30 秒没有帧时 CLI 以代码 4 退出。256 帧缓冲区用于保护生产者,发生丢帧后会在下一个任意类型的帧前发送计数。
命令特例
events始终输出 outer NDJSON envelope,没有纯日志行模式。- Trivy
--json输出自己的 progress/result payload,不使用 outerStreamFrameEnvelope。 - 当前 CLI 的镜像进度写入 stdout。
- 纯文本输出由命令决定,不要假设进度总在 stderr。
取消与退出码
收到 SIGINT 或 SIGTERM 后,CLI 会请求取消并退出,但不承诺排空全部在途帧。
| 代码 | 含义 |
|---|---|
0 | 正常完成 |
1 | 校验、RPC 或 stream 错误 |
2 | CLI 参数解析错误 |
3 | Daemon 发现或握手失败 |
4 | 心跳超时 |
130 | SIGINT |
143 | SIGTERM |
使用 dockerman schema 查看 daemon RPC 元数据。Schema 不会把 Trivy 的命令特定输出变成 outer daemon envelope。