Containers
Podman
OpenClaw Gateway in einem rootless Podman-Container ausführen, verwaltet durch Ihren aktuellen Nicht-Root-Benutzer.
Das vorgesehene Modell ist:
- Podman führt den Gateway-Container aus.
- Ihre Host-CLI
openclawist die Steuerungsebene. - Persistenter Zustand liegt standardmäßig auf dem Host unter
~/.openclaw. - Die tägliche Verwaltung verwendet
openclaw --container <name> ...stattsudo -u openclaw,podman execoder eines separaten Dienstbenutzers.
Voraussetzungen
- Podman im rootless-Modus
- OpenClaw CLI auf dem Host installiert
- Optional:
systemd --user, wenn Sie von Quadlet verwalteten automatischen Start möchten - Optional:
sudonur, wenn Sieloginctl enable-linger "$(whoami)"für Boot-Persistenz auf einem Headless-Host möchten
Schnellstart
Einmalige Einrichtung
Führen Sie aus dem Repo-Root ./scripts/podman/setup.sh aus.
Gateway-Container starten
Starten Sie den Container mit ./scripts/run-openclaw-podman.sh launch.
Onboarding im Container ausführen
Führen Sie ./scripts/run-openclaw-podman.sh launch setup aus und öffnen Sie dann http://127.0.0.1:18789/.
Laufenden Container über die Host-CLI verwalten
Setzen Sie OPENCLAW_CONTAINER=openclaw und verwenden Sie dann normale openclaw-Befehle vom Host.
Einrichtungsdetails:
./scripts/podman/setup.sherstellt standardmäßigopenclaw:localin Ihrem rootless Podman-Store oder verwendetOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGE, wenn Sie eines davon setzen.- Es erstellt
~/.openclaw/openclaw.jsonmitgateway.mode: "local", falls diese Datei fehlt. - Es erstellt
~/.openclaw/.envmitOPENCLAW_GATEWAY_TOKEN, falls diese Datei fehlt. - Für manuelle Starts liest der Helfer nur eine kleine Allowlist Podman-bezogener Schlüssel aus
~/.openclaw/.envund übergibt explizite Runtime-Umgebungsvariablen an den Container; er übergibt nicht die vollständige Env-Datei an Podman.
Von Quadlet verwaltete Einrichtung:
./scripts/podman/setup.sh --quadlet
Quadlet ist eine reine Linux-Option, da es von systemd-Benutzerdiensten abhängt.
Sie können auch OPENCLAW_PODMAN_QUADLET=1 setzen.
Optionale Build-/Setup-Env-Vars:
OPENCLAW_IMAGEoderOPENCLAW_PODMAN_IMAGE-- ein vorhandenes/heruntergeladenes Image verwenden, stattopenclaw:localzu erstellenOPENCLAW_DOCKER_APT_PACKAGES-- zusätzliche apt-Pakete während des Image-Builds installierenOPENCLAW_EXTENSIONS-- Plugin-Abhängigkeiten zur Build-Zeit vorinstallierenOPENCLAW_INSTALL_BROWSER-- Chromium und Xvfb für Browser-Automatisierung vorinstallieren (zum Aktivieren auf1setzen)
Container-Start:
./scripts/run-openclaw-podman.sh launch
Das Skript startet den Container mit Ihrer aktuellen uid/gid, --userns=keep-id, und bind-mountet Ihren OpenClaw-Zustand in den Container.
Onboarding:
./scripts/run-openclaw-podman.sh launch setup
Öffnen Sie dann http://127.0.0.1:18789/ und verwenden Sie das Token aus ~/.openclaw/.env.
Standard für Host-CLI:
export OPENCLAW_CONTAINER=openclaw
Dann werden Befehle wie diese automatisch in diesem Container ausgeführt:
openclaw dashboard --no-open
openclaw gateway status --deep # includes extra service scan
openclaw doctor
openclaw channels login
Unter macOS kann Podman machine dazu führen, dass der Browser für den Gateway nicht lokal erscheint. Wenn die Control UI nach dem Start Geräteauthentifizierungsfehler meldet, verwenden Sie die Tailscale-Anleitung unter Podman und Tailscale.
Podman und Tailscale
Für HTTPS- oder Remote-Browserzugriff folgen Sie der Hauptdokumentation zu Tailscale.
Podman-spezifischer Hinweis:
- Belassen Sie den Podman-Publish-Host bei
127.0.0.1. - Bevorzugen Sie hostverwaltetes
tailscale servegegenüberopenclaw gateway --tailscale serve. - Unter macOS sollten Sie Tailscale-Zugriff verwenden, wenn der lokale Browser-Geräteauthentifizierungskontext unzuverlässig ist, statt Ad-hoc-Workarounds mit lokalen Tunneln.
Siehe:
Systemd (Quadlet, optional)
Wenn Sie ./scripts/podman/setup.sh --quadlet ausgeführt haben, installiert die Einrichtung eine Quadlet-Datei unter:
~/.config/containers/systemd/openclaw.container
Nützliche Befehle:
- Starten:
systemctl --user start openclaw.service - Stoppen:
systemctl --user stop openclaw.service - Status:
systemctl --user status openclaw.service - Logs:
journalctl --user -u openclaw.service -f
Nach dem Bearbeiten der Quadlet-Datei:
systemctl --user daemon-reload
systemctl --user restart openclaw.service
Für Boot-Persistenz auf SSH-/Headless-Hosts aktivieren Sie Lingering für Ihren aktuellen Benutzer:
sudo loginctl enable-linger "$(whoami)"
Konfiguration, Env und Speicher
- Konfigurationsverzeichnis:
~/.openclaw - Workspace-Verzeichnis:
~/.openclaw/workspace - Token-Datei:
~/.openclaw/.env - Start-Helfer:
./scripts/run-openclaw-podman.sh
Das Startskript und Quadlet bind-mounten Host-Zustand in den Container:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
Standardmäßig sind dies Host-Verzeichnisse, kein anonymer Container-Zustand, sodass
openclaw.json, agentenspezifische auth-profiles.json, Channel-/Provider-Zustand,
Sitzungen und Workspace einen Container-Austausch überstehen.
Die Podman-Einrichtung setzt außerdem gateway.controlUi.allowedOrigins für 127.0.0.1 und localhost auf dem veröffentlichten Gateway-Port, damit das lokale Dashboard mit dem Nicht-loopback-Bind des Containers funktioniert.
Nützliche Env-Vars für den manuellen Launcher:
OPENCLAW_PODMAN_CONTAINER-- Container-Name (standardmäßigopenclaw)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE-- auszuführendes ImageOPENCLAW_PODMAN_GATEWAY_HOST_PORT-- Host-Port, der Container18789zugeordnet istOPENCLAW_PODMAN_BRIDGE_HOST_PORT-- Host-Port, der Container18790zugeordnet istOPENCLAW_PODMAN_PUBLISH_HOST-- Host-Schnittstelle für veröffentlichte Ports; Standard ist127.0.0.1OPENCLAW_GATEWAY_BIND-- Gateway-Bind-Modus innerhalb des Containers; Standard istlanOPENCLAW_PODMAN_USERNS--keep-id(Standard),autooderhost
Der manuelle Launcher liest ~/.openclaw/.env, bevor Container-/Image-Standards finalisiert werden, sodass Sie diese dort persistent speichern können.
Wenn Sie ein nicht standardmäßiges OPENCLAW_CONFIG_DIR oder OPENCLAW_WORKSPACE_DIR verwenden, setzen Sie dieselben Variablen sowohl für ./scripts/podman/setup.sh als auch für spätere ./scripts/run-openclaw-podman.sh launch-Befehle. Der repo-lokale Launcher persistiert benutzerdefinierte Pfadüberschreibungen nicht über Shells hinweg.
Quadlet-Hinweis:
- Der generierte Quadlet-Dienst behält absichtlich eine feste, gehärtete Standardform bei: veröffentlichte Ports auf
127.0.0.1,--bind laninnerhalb des Containers undkeep-id-Benutzernamespace. - Er pinnt
OPENCLAW_NO_RESPAWN=1,Restart=on-failureundTimeoutStartSec=300. - Er veröffentlicht sowohl
127.0.0.1:18789:18789(Gateway) als auch127.0.0.1:18790:18790(Bridge). - Er liest
~/.openclaw/.envals Runtime-EnvironmentFilefür Werte wieOPENCLAW_GATEWAY_TOKEN, verwendet aber nicht die Podman-spezifische Override-Allowlist des manuellen Launchers. - Wenn Sie benutzerdefinierte Veröffentlichungsports, einen Publish-Host oder andere Container-Run-Flags benötigen, verwenden Sie den manuellen Launcher oder bearbeiten Sie
~/.config/containers/systemd/openclaw.containerdirekt, laden Sie anschließend neu und starten Sie den Dienst neu.
Nützliche Befehle
- Container-Logs:
podman logs -f openclaw - Container stoppen:
podman stop openclaw - Container entfernen:
podman rm -f openclaw - Dashboard-URL über Host-CLI öffnen:
openclaw dashboard --no-open - Health/Status über Host-CLI:
openclaw gateway status --deep(RPC-Probe + zusätzlicher Dienstscan)
Fehlerbehebung
- Zugriff verweigert (EACCES) auf Konfiguration oder Workspace: Der Container läuft standardmäßig mit
--userns=keep-idund--user <your uid>:<your gid>. Stellen Sie sicher, dass die Host-Pfade für Konfiguration/Workspace Ihrem aktuellen Benutzer gehören. - Gateway-Start blockiert (fehlendes
gateway.mode=local): Stellen Sie sicher, dass~/.openclaw/openclaw.jsonexistiert undgateway.mode="local"setzt.scripts/podman/setup.sherstellt dies, falls es fehlt. - Container-CLI-Befehle treffen das falsche Ziel: Verwenden Sie explizit
openclaw --container <name> ...oder exportieren SieOPENCLAW_CONTAINER=<name>in Ihrer Shell. openclaw updateschlägt mit--containerfehl: Erwartet. Erstellen/laden Sie das Image neu und starten Sie dann den Container oder den Quadlet-Dienst neu.- Quadlet-Dienst startet nicht: Führen Sie
systemctl --user daemon-reloadaus, dannsystemctl --user start openclaw.service. Auf Headless-Systemen benötigen Sie möglicherweise außerdemsudo loginctl enable-linger "$(whoami)". - SELinux blockiert Bind-Mounts: Lassen Sie das standardmäßige Mount-Verhalten unverändert; der Launcher fügt unter Linux automatisch
:Zhinzu, wenn SELinux enforcing oder permissive ist.