CLI
ストリーミング契約
NDJSON envelope、コマンド固有出力、heartbeat、backpressure、signal。
複数の CLI コマンドが daemon stream を利用しますが、すべての長時間コマンドが同じ出力形式ではありません。パーサーを作る前に各コマンドの --help を確認してください。
Daemon stream envelope
daemon stream を JSON で公開するコマンドは、stdout に 1 行 1 envelope の NDJSON を出力します。シーケンス番号は 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 はどちらも終端フレームで、1 つの stream が両方を出すことはありません。error には code、message、任意の details が含まれます。
daemon は通常 15 秒ごとに heartbeat を送り、30 秒間フレームがないと CLI はコード 4 で終了します。256 フレームのバッファでドロップが起きた場合、次の任意タイプのフレーム前に件数を送ります。
コマンド固有の例外
eventsは常に outer NDJSON envelope を出力し、プレーンログ行モードはありません。- Trivy
--jsonは独自の progress/result payload を出力し、outerStreamFrameEnvelopeを使いません。 - 現在のイメージ進捗表示は stdout へ出力します。
- プレーン出力はコマンドごとに異なり、進捗が常に stderr とは限りません。
キャンセルと終了コード
SIGINT または SIGTERM でキャンセルを要求して終了しますが、すべての処理中フレームを排出する保証はありません。
| コード | 意味 |
|---|---|
0 | 正常終了 |
1 | 検証、RPC、stream エラー |
2 | CLI 引数解析エラー |
3 | Daemon 検出または handshake 失敗 |
4 | Heartbeat timeout |
130 | SIGINT |
143 | SIGTERM |
dockerman schema で daemon RPC メタデータを確認できます。Trivy 固有出力は outer daemon envelope ではありません。