Dockerman Docs
CLI

ストリーミング契約

ストリーミング RPC の NDJSON エンベロープ、ハートビート、バックプレッシャ、シグナル処理。

ストリーミング RPC(logs -fstatseventsimage pull/push/buildcompose pull/uptrivy scan/installtunnel create)はすべて、v5.3.0 で導入された同一の通信契約(schema バージョン 2)を共有します。

エンベロープ

ストリーミングコマンドに --json を渡すと、stdout の各行が 1 つのエンベロープになります。外側のエンベロープは単調増加する seqtype 判別子を持ち、データフレームはその型付きペイロードを payload に格納します。

{"seq":1,"type":"data","payload":{"line":"hello"}}
{"seq":2,"type":"heartbeat"}
{"seq":3,"type":"dropped","payload":{"count":12}}
{"seq":4,"type":"data","payload":{"kind":"result","report":{"...":"..."}}}
{"seq":5,"type":"end"}
{"seq":6,"type":"error","payload":{"code":"docker_not_found","message":"container web not found","details":null}}
type意味
data通常のフレーム;型付きペイロードは payload に入る
heartbeat生存確認。デフォルト間隔は 15 秒
droppedバックプレッシャの目印。daemon が payload.count 個のフレームを破棄;どの種類であれ次のフレームの前に発行される
endstream が正常終了。これ以上フレームは届かない
error致命的エラー。payload には { code, message, details };このフレームの後に stream は終了する

一部のコマンド(Trivy scan、Trivy install、Compose pull)はデータペイロード内にもう 1 段の tag を埋め込みます。例えば dockerman trivy scandata フレームを発行し、その payload.kind"progress""result""error" のいずれか——内側の error は成功した data エンベロープ越しに運ばれる stream 内エラーで、外側の error エンベロープはトランスポートレベルの障害用に予約されています。

平文モード

--json なしでは、ストリーミングコマンドは人間向けの出力をします:

  • logs -fevents:データフレーム 1 つにつき 1 行のログを stdout に、エラーと診断は stderr に。
  • statsimage pull/push/buildcompose pull/uptrivy install/scan:進捗行は stderr(stdout をファイルにリダイレクトできるように)、最終結果は該当するコマンドで stdout に。

ハートビートとタイムアウト

daemon は 15 秒ごとにハートビートを送ります。CLI は最大 30 秒(ハートビート 2 回分)待った後、stream を死亡判定し、終了コード 4 で終わります。CLI 呼び出しを長いパイプラインで包むときは stdout をバッファしないでください——バッファリングはハートビートを隠してしまい、自分の監視に偽陽性を発生させます。

バックプレッシャ

各 stream には daemon と CLI の間に 256 フレーム分のバッファがあります。コンシューマが遅い場合、daemon は古いフレームを破棄し、次のデータフレームの前に Dropped { count } フレームを 1 つ発行します。これによりターミナル(または jq -c)がプロデューサに追いつかないときも stream を生かし続けます。

キャンセル

Ctrl+C を押すと SIGINT が送られます;CLI がこれをキャッチし、CancelOnDrop 経由で daemon にキャンセルを依頼し、進行中のフレームを排水してから終了コード 130 で終わります。SIGTERM143 で終わります。daemon は TCP / Unix ソケットの切断(ブラウザタブを閉じた、親プロセスが kill された)も検知し、サーバー側リソースを goroutine リークなしに解放します。

ストリーム終了コード

コード意味
0stream が自然終了(コンテナ停止、イメージ pull 完了、スキャン完了)
1接続成功後の本体エラー(本体前の 4xx を含む)
3stream を開く前に daemon の発見 / ハンドシェイクが失敗
4ハートビートタイムアウト(30 秒間フレームなし)
130SIGINT
143SIGTERM

schema を確認

ストリーミング RPC とそのエンベロープ形状を一覧できます:

dockerman schema --format mcp-tools
dockerman schema follow_logs
dockerman schema follow_stats
dockerman schema monitor_events

ストリーミング RPC は streaming: trueStreamFrameEnvelope 参照でマークされます。unary callable RPC(例:fetch_logs)は callable: true でマークされ、通常の result schema を持ちます。