Agents in Containern,
in Reichweite.

Ein Agent in einem Container ist von deinem Mac abgeschottet, er kann Gnista also nicht sagen, dass er dich braucht. Gib dem Container Gnistas Helper und einen Weg zurück, und seine Sitzungen kriegen Zeilen in der Notch wie jede andere. So geht’s für einen Devcontainer auf deinem Mac, einen Container auf einem Server und einen Kubernetes-Pod.

7 Tage gratis testenKein Konto, keine Karte · danach einmalig 19 €

Aktualisiert am

Die kurze Antwort

  • Auf deinem Mac: Schalte Einstellungen ▸ Entfernt ▸ Agenten in Containern ein, füg die angezeigten Zeilen in deine devcontainer.json ein und bau den Container neu.
  • Auf einem Server, den Gnista verbindet: Bind das ~/.gnista des Servers auf dieselbe Weise in den Container ein.
  • In Kubernetes: Wähl unter Einstellungen ▸ Entfernt „Anderer Host …“ und tipp kube:, den Kontext, den Namespace und den Pod ein.

Devcontainer auf deinem Mac

  1. Schalte in Gnistas Einstellungen ▸ Entfernt „Agenten in Containern“ ein. Gnista legt einen Ordner für Container an, ~/.gnista/containers, mit seinem Helper für Linux auf beiden Prozessoren.
  2. Klick unter den angezeigten Zeilen auf „Kopieren“ und füg sie in die devcontainer.json deines Projekts ein.
  3. Bau den Container neu. Beim Erstellen verbindet er die Agents, die in ihm installiert sind.
  4. Starte eine Sitzung im Container. Ihre Zeile zeigt Docker als Rechner.

Die Zeilen

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

Ohne Devcontainer bindest du denselben Ordner in einen beliebigen Container ein und führst darin einmal /opt/gnista/bin/gnista install all aus:

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

So funktioniert’s

Docker Desktop reicht keine Sockets von deinem Mac in Container durch, also lauscht Gnista auf einem Port auf dem Loopback deines Macs, den Container als host.docker.internal erreichen. Jede Verbindung muss mit einem Passwort beginnen, das in dem Ordner liegt, den du einbindest, sodass andere Apps auf deinem Mac nichts senden können. arm64- und x86_64-Images funktionieren beide.

Container auf einem Server

Verbinde zuerst den Server: Agents per SSH. Bind dann sein ~/.gnista in den Container ein, mit denselben Zeilen wie oben, aber ${localEnv:HOME}/.gnista als Quelle. Der Nutzer im Container muss root sein oder deine Nutzer-ID auf dem Server haben, um dort an den Socket zu kommen.

Kubernetes-Pods

  1. Installier kubectl auf deinem Mac, mit Homebrew oder Rancher Desktop, und prüf, ob kubectl exec den Pod erreicht.
  2. Klick in Gnistas Einstellungen ▸ Entfernt auf „Verbinden“, wähl „Anderer Host …“ und tipp kube: mit Kontext, Namespace und Pod ein, etwa kube:prod/agents/agent-0. Ein Deployment geht auch: kube:prod/agents/deploy/agents.
  3. Gnista richtet den Pod über kubectl exec ein, wie einen Server, und hält darüber ein Relay für die Events der Agents am Laufen. Startet der Pod neu, richtet Gnista ihn erneut ein.

Grenzen

  • Wer im Container oder Pod Befehle ausführen kann, kann deine Freigaben beantworten, wie auf einem Server. Verbinde nur die, denen du vertraust.
  • Sitzungen in Containern auf deinem Mac erscheinen alle als Docker, nicht nach Container. Ein Klick holt den Terminal-Tab hervor, in dem docker exec oder kubectl exec in ihn läuft.
  • Nur Linux-Container und -Pods, x86_64 oder arm64.
  • Läuft deine Cloud-Anmeldung für kubectl ab, sagt die Zeile des Pods, dass er dich braucht; melde dich neu an, wie du es für kubectl tun würdest, und Gnista versucht es von selbst erneut.
  • Organisationen, die entfernte Rechner auf ihren Macs abschalten, schalten auch das ab: verwaltete Einstellungen.

Mehr Anleitungen.