コンテナのエージェントも、
すぐ手の届く所に。

コンテナの中のエージェントはMacから隔てられているので、出番が来てもGnistaに知らせられません。コンテナにGnistaのヘルパーと戻り道を渡せば、そのセッションにもほかと同じくノッチに行ができます。Mac上のdevcontainer、サーバ上のコンテナ、Kubernetesのポッド、それぞれの方法をまとめました。

7日間無料で試すアカウント・カード不要 · その後€19の買い切り

更新:

手短に言うと

  • Mac上なら:設定 ▸ リモート ▸ 「コンテナ内のエージェント」をオンにし、表示される行をdevcontainer.jsonに加えて、コンテナをリビルドします。
  • Gnistaが接続するサーバ上なら:同じようにして、サーバの~/.gnistaをコンテナにマウントします。
  • Kubernetesなら:設定 ▸ リモートで「その他のホスト…」を選び、kube:に続けてコンテキスト、ネームスペース、ポッドを入力します。

Mac上のdevcontainer

  1. Gnistaの設定 ▸ リモートで、「コンテナ内のエージェント」をオンにします。Gnistaはコンテナ用のフォルダ~/.gnista/containersを作り、両方のプロセッサ向けのLinux用ヘルパーを入れます。
  2. 表示される行の下の「コピー」をクリックし、プロジェクトのdevcontainer.jsonに加えます。
  3. コンテナをリビルドします。作成されるときに、中にインストールされたエージェントを接続します。
  4. コンテナでセッションを始めます。行には、マシンとしてDockerと表示されます。

加える行

"mounts": ["source=${localEnv:HOME}/.gnista/containers,target=/opt/gnista,type=bind"],
"containerEnv": { "GNISTA_HOME": "/opt/gnista" },
"postCreateCommand": "/opt/gnista/bin/gnista install all"

devcontainerを使わない場合は、同じフォルダを任意のコンテナにマウントし、その中で/opt/gnista/bin/gnista install allを一度実行します。

docker run -it -v ~/.gnista/containers:/opt/gnista -e GNISTA_HOME=/opt/gnista your-image

仕組み

Docker DesktopはMacのソケットをコンテナに渡さないので、GnistaはMacのループバックのポートで待ち受けます。コンテナからはhost.docker.internalで届きます。接続はどれも、マウントするフォルダにあるパスワードで始める必要があるので、Mac上のほかのアプリは送れません。arm64とx86_64、どちらのイメージでも動作します。

サーバ上のコンテナ

まずサーバを接続します:SSH越しのエージェント。次に、上と同じ行で、ソースを${localEnv:HOME}/.gnistaにして、サーバの~/.gnistaをコンテナにマウントします。そこのソケットに届くには、コンテナのユーザがrootか、サーバでのあなたのユーザIDである必要があります。

Kubernetesのポッド

  1. HomebrewかRancher Desktopで、Macにkubectlをインストールし、kubectl execがポッドに届くか確認します。
  2. Gnistaの設定 ▸ リモートで「接続」をクリックし、「その他のホスト…」を選んで、kube:に続けてコンテキスト、ネームスペース、ポッドを入力します(例:kube:prod/agents/agent-0)。デプロイメントも使えます:kube:prod/agents/deploy/agents。
  3. Gnistaはサーバと同じくkubectl execでポッドをセットアップし、その上でエージェントのイベントを中継し続けます。ポッドが再起動すると、Gnistaがもう一度セットアップします。

制限

  • コンテナやポッドでコマンドを実行できる人は誰でも、サーバと同じく、あなたの承認に応答できます。信頼できるものだけを接続してください。
  • Mac上のコンテナのセッションは、コンテナごとではなく、すべてDockerと表示されます。クリックすると、そこへのdocker execやkubectl execを実行しているターミナルのタブが前面に出ます。
  • 対応するのはLinuxのコンテナとポッドだけで、x86_64かarm64です。
  • kubectlのクラウドへのログインが期限切れになると、ポッドの行に対応が必要と表示されます。kubectlのときと同じようにログインし直せば、Gnistaが自動でもう一度試します。
  • 組織が管理するMacでリモートマシンをオフにすると、これもオフになります:MDMでの設定。

ほかのガイド。