docker/ ディレクトリには、すぐに使える Kubernetes マニフェスト kubernetes.yaml が用意されています。本ページはこのマニフェストのデプロイガイドで、Docker Compose デプロイと最も異なる部分である Box サンドボックスランタイム に焦点を当てます。
コンポーネント構成
マニフェストはlangbot ネームスペースに以下のコンポーネントを作成します:
| コンポーネント | 説明 | ポート |
|---|---|---|
langbot | メインアプリ(WebUI + webhook) | 5300 / 2280-2290 |
langbot-plugin-runtime | プラグインランタイム | 5400 |
langbot-box | Box サンドボックスランタイム(任意) | 5410 |
langbot-data、langbot-plugins、langbot-plugin-runtime-data の 3 つの PVC。Box ワークスペースのルートは PVC ではなくノード上の hostPath(/app/data/box)を使用します。
クイックスタート
Box サンドボックスランタイム
langbot-box は LangBot にコードサンドボックス機能を提供し、サンドボックスツール(exec / read / write / edit / glob / grep)、スキルの activate ツールと追加・編集、および stdio モードの MCP サーバーを支えます。これは任意のコンポーネントです:デプロイしなくても LangBot は動作し、ダッシュボードとスキル一覧は読み取り専用で表示されますが、上記の機能は無効になります。その場合は langbot に BOX__ENABLED=false を設定してください。
仕組みと重要な制約
LangBot 公式イメージには Docker CLI のみが含まれています(dockerd も nsjail も含まれません)。そのため Box ランタイムは、マウントされたノードの Docker socket(/var/run/docker.sock)経由でサンドボックスコンテナを作成します。Pod 内で dockerd を実行するわけではありません。
ここから重要な制約が生じます:実際にサンドボックスコンテナを作成するのはノード上の Docker デーモンであり、bind-mount のパスをノードのファイルシステム視点で解決します。したがって Box ワークスペースのルートは、以下の 3 か所で同一の絶対パスでなければなりません:
- ノード上の実際のパス
langbot-boxコンテナ内のマウントパス- それが作成する各サンドボックスコンテナ内のマウントパス
hostPath(/app/data/box に固定)を使う理由です:PVC のパスは Pod の mount namespace 内にしか存在せず、ノードの dockerd からは見えません。また langbot と langbot-box は podAffinity によって同一ノードにスケジュールされ、この hostPath を共有します。
接続と設定
langbotは WebSocket で Box ランタイムに接続します。エンドポイントは ConfigMap のBOX__RUNTIME__ENDPOINT: ws://langbot-box:5410で指定します。
コンテナ内のデフォルトホスト名は
langbot_box(アンダースコア付き)ですが、アンダースコアは有効な Kubernetes DNS 名ではありません。そのためマニフェストでは、有効な Service 名 langbot-box を使ってエンドポイントを明示的に指定する必要があり、コンテナ内のデフォルト値に依存できません。- Box ランタイムは自身の
box.local.*/BOX__*環境変数を読み取りません。設定はlangbotがBOX__LOCAL__*を読み取り、INIT RPC で渡します。したがってBOX__LOCAL__HOST_ROOT/DEFAULT_WORKSPACE/SKILLS_ROOT/ALLOWED_MOUNT_ROOTSはすべてlangbotDeployment に設定し、HOST_ROOTは両側のbox-rootマウントパス(/app/data/box)と一致させる必要があります。
セキュリティに関する注意
ノードの Docker socket をマウントすると、Box ランタイム(およびサンドボックス内で実行される任意のコード)にノードへの実質的な root 権限を与えることになります。Box はこのワークロードを信頼できるノードにのみデプロイし、できればテイント/トレラレーションで隔離した専用ノードプールを使用してください。より強い隔離境界が必要な場合は、box.backend を e2b に切り替え(E2B_API_KEY を設定)、docker.sock のマウントと hostPath を削除します。詳細はサンドボックス設定を参照してください。
Box の準備完了を確認する
サンドボックスが不要な場合
サンドボックス機能が不要な場合は、マニフェストからlangbot-box の Deployment / Service を削除し、langbot Deployment に BOX__ENABLED=false を設定して接続失敗の警告ログを回避してください。
関連ドキュメント
- Docker デプロイ
- サンドボックスドキュメント と サンドボックス設定
- スキルシステムドキュメント
- マニフェストのソースファイル:リポジトリ内の
docker/kubernetes.yaml
