Containers
Podman
Führen Sie das OpenClaw Gateway in einem Rootless-Podman-Container aus, der von Ihrem aktuellen Nicht-Root-Benutzer verwaltet wird.
Das Modell:
- Podman führt den Gateway-Container aus.
- Ihre
openclawCLI auf dem Host ist die Steuerungsebene. - Persistenter Zustand wird standardmäßig auf dem Host unter
~/.openclawgespeichert. - Für die tägliche Verwaltung wird
openclaw --container <name> ...anstelle vonsudo -u openclaw,podman execoder einem separaten Dienstbenutzer verwendet.
Voraussetzungen
- Podman im Rootless-Modus
- Auf dem Host installierte OpenClaw CLI
- Optional:
systemd --user, wenn Sie einen von Quadlet verwalteten automatischen Start wünschen - Optional:
sudonur, wenn Sieloginctl enable-linger "$(whoami)"für die Startpersistenz auf einem Headless-Host verwenden möchten
Schnellstart
Einmalige Einrichtung
Führen Sie im Stammverzeichnis des Repositorys ./scripts/podman/setup.sh aus.
Dadurch wird openclaw:local in Ihrem Rootless-Podman-Speicher gebaut (oder OPENCLAW_IMAGE / OPENCLAW_PODMAN_IMAGE abgerufen, falls festgelegt), bei Bedarf ~/.openclaw/openclaw.json mit gateway.mode: "local" erstellt und bei Bedarf ~/.openclaw/.env mit einem generierten OPENCLAW_GATEWAY_TOKEN erstellt.
Optionale Umgebungsvariablen für die Build-Zeit:
| Variable | Wirkung |
|---|---|
OPENCLAW_IMAGE / OPENCLAW_PODMAN_IMAGE |
Ein vorhandenes/abgerufenes Image verwenden, anstatt openclaw:local zu bauen |
OPENCLAW_IMAGE_APT_PACKAGES |
Während des Image-Builds zusätzliche apt-Pakete installieren (akzeptiert auch das veraltete OPENCLAW_DOCKER_APT_PACKAGES) |
OPENCLAW_IMAGE_PIP_PACKAGES |
Während des Image-Builds zusätzliche Python-Pakete installieren; Versionen festlegen und nur vertrauenswürdige Paketindizes verwenden |
OPENCLAW_EXTENSIONS |
Unterstützte ausgewählte Plugins kompilieren/paketieren und deren Laufzeitabhängigkeiten installieren |
OPENCLAW_INSTALL_BROWSER |
Chromium und Xvfb für die Browserautomatisierung vorinstallieren (auf 1 setzen) |
Alternativ für eine von Quadlet verwaltete Einrichtung (nur Linux und systemd-Benutzerdienste):
./scripts/podman/setup.sh --quadletOder legen Sie OPENCLAW_PODMAN_QUADLET=1 fest.
Gateway-Container starten
./scripts/run-openclaw-podman.sh launchStartet den Container mit Ihrer aktuellen UID/GID und --userns=keep-id und bind-mountet Ihren OpenClaw-Zustand in den Container.
Onboarding im Container ausführen
./scripts/run-openclaw-podman.sh launch setupÖffnen Sie anschließend http://127.0.0.1:18789/ und verwenden Sie das Token aus ~/.openclaw/.env.
Modellauthentifizierung: Verwenden Sie während der Einrichtung die von OpenClaw verwaltete Authentifizierung (Anthropic-API-Schlüssel oder OpenAI-Codex-Browser-OAuth-/Gerätecode-Authentifizierung für Codex-gestütztes OpenAI). Der Podman-Launcher mountet keine Anmeldedatenverzeichnisse der Host-CLI wie ~/.claude oder ~/.codex in den Einrichtungs- oder Gateway-Container. Vorhandene Host-CLI-Anmeldungen dienen nur der komfortablen Nutzung auf demselben Host -- bewahren Sie bei Containerinstallationen die Provider-Authentifizierung in dem gemounteten Zustand ~/.openclaw auf, den die Einrichtung verwaltet.
Laufenden Container über die Host-CLI verwalten
export OPENCLAW_CONTAINER=openclawAnschließend werden normale openclaw-Befehle automatisch in diesem Container ausgeführt:
openclaw dashboard --no-openopenclaw gateway status --deep # enthält eine zusätzliche Dienstsucheopenclaw doctoropenclaw channels loginUnter macOS kann die Podman-Maschine dazu führen, dass der Browser für das Gateway nicht lokal erscheint. Wenn die Control UI nach dem Start Fehler bei der Geräteauthentifizierung meldet, verwenden Sie die Tailscale-Anleitung unter Podman und Tailscale.
Der manuelle Launcher liest aus ~/.openclaw/.env nur eine kleine Positivliste Podman-bezogener Schlüssel und übergibt dem Container explizite Laufzeit-Umgebungsvariablen; er übergibt Podman nicht die vollständige Umgebungsdatei.
Podman und Tailscale
Befolgen Sie für HTTPS oder den Remote-Browserzugriff die allgemeine Tailscale-Dokumentation.
Podman-spezifische Hinweise:
- Belassen Sie den Podman-Veröffentlichungshost bei
127.0.0.1. - Bevorzugen Sie das vom Host verwaltete
tailscale servegegenüberopenclaw gateway --tailscale serve. - Verwenden Sie unter macOS den Tailscale-Zugriff anstelle improvisierter lokaler Tunnel-Umgehungslösungen, wenn der Geräteauthentifizierungskontext des lokalen Browsers unzuverlässig ist.
Siehe Tailscale und Control UI.
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.
| Aktion | Befehl |
|---|---|
| Starten | systemctl --user start openclaw.service |
| Stoppen | systemctl --user stop openclaw.service |
| Status | systemctl --user status openclaw.service |
| Protokolle | journalctl --user -u openclaw.service -f |
Nach dem Bearbeiten der Quadlet-Datei:
systemctl --user daemon-reloadsystemctl --user restart openclaw.serviceAktivieren Sie für die Startpersistenz auf SSH-/Headless-Hosts das Lingering für Ihren aktuellen Benutzer:
sudo loginctl enable-linger "$(whoami)"Der generierte Quadlet-Dienst behält eine feste, gehärtete Standardkonfiguration bei: 127.0.0.1 veröffentlichte Ports (18789 Gateway, 18790 Bridge), --bind lan innerhalb des Containers, keep-id-Benutzernamensraum, OPENCLAW_NO_RESPAWN=1, Restart=on-failure und TimeoutStartSec=300. Er liest ~/.openclaw/.env als Laufzeit-EnvironmentFile für Werte wie OPENCLAW_GATEWAY_TOKEN, verwendet jedoch nicht die Podman-spezifische Override-Positivliste des manuellen Launchers. Verwenden Sie für benutzerdefinierte veröffentlichte Ports, einen Veröffentlichungshost oder andere Flags zur Container-Ausführung stattdessen den manuellen Launcher, oder bearbeiten Sie ~/.config/containers/systemd/openclaw.container direkt und laden Sie den Dienst anschließend neu und starten Sie ihn neu.
Konfiguration, Umgebung und Speicher
- Konfigurationsverzeichnis:
~/.openclaw - Arbeitsbereichsverzeichnis:
~/.openclaw/workspace - Token-Datei:
~/.openclaw/.env - Starthilfsprogramm:
./scripts/run-openclaw-podman.sh
Das Startskript und Quadlet bind-mounten den Hostzustand in den Container: OPENCLAW_CONFIG_DIR -> /home/node/.openclaw, OPENCLAW_WORKSPACE_DIR -> /home/node/.openclaw/workspace. Standardmäßig handelt es sich dabei um Hostverzeichnisse und nicht um anonymen Containerzustand. Daher bleiben openclaw.json, agentenspezifische auth-profiles.json, Kanal-/Provider-Zustand, Sitzungen und der Arbeitsbereich beim Ersetzen des Containers erhalten. Die Einrichtung befüllt außerdem gateway.controlUi.allowedOrigins für 127.0.0.1 und localhost auf dem veröffentlichten Gateway-Port vor, damit das lokale Dashboard mit der Nicht-Loopback-Bindung des Containers funktioniert.
Nützliche Umgebungsvariablen für den manuellen Launcher (speichern Sie diese dauerhaft in ~/.openclaw/.env; der Launcher liest diese Datei, bevor er die Container-/Image-Standardwerte festlegt):
| Variable | Standard | Wirkung |
|---|---|---|
OPENCLAW_PODMAN_CONTAINER |
openclaw |
Containername |
OPENCLAW_PODMAN_IMAGE / OPENCLAW_IMAGE |
openclaw:local |
Auszuführendes Image |
OPENCLAW_PODMAN_GATEWAY_HOST_PORT |
18789 |
Dem Container-Port 18789 zugeordneter Host-Port |
OPENCLAW_PODMAN_BRIDGE_HOST_PORT |
18790 |
Dem Container-Port 18790 zugeordneter Host-Port |
OPENCLAW_PODMAN_PUBLISH_HOST |
127.0.0.1 |
Hostschnittstelle für veröffentlichte Ports |
OPENCLAW_GATEWAY_BIND |
lan |
Gateway-Bindungsmodus innerhalb des Containers |
OPENCLAW_PODMAN_USERNS |
keep-id |
keep-id, auto oder host |
Wenn Sie ein nicht standardmäßiges OPENCLAW_CONFIG_DIR oder OPENCLAW_WORKSPACE_DIR verwenden, legen Sie dieselben Variablen sowohl für ./scripts/podman/setup.sh als auch für spätere ./scripts/run-openclaw-podman.sh launch-Befehle fest -- der Repository-lokale Launcher speichert benutzerdefinierte Pfadüberschreibungen nicht über Shell-Sitzungen hinweg.
Images aktualisieren
Nachdem Sie ein neues Image gebaut oder abgerufen haben, starten Sie den Container oder den Quadlet-Dienst neu. Beim ersten Start einer neuen OpenClaw-Version führt das Gateway sichere Zustands- und Plugin-Reparaturen durch, bevor es seine Bereitschaft meldet.
Wenn das Gateway beendet wird, anstatt betriebsbereit zu werden, führen Sie dasselbe Image einmal mit
openclaw doctor --fix für denselben gemounteten Zustand/dieselbe gemountete Konfiguration aus und starten Sie anschließend das
Gateway normal neu:
OPENCLAW_CONFIG_DIR="${OPENCLAW_CONFIG_DIR:-$HOME/.openclaw}"OPENCLAW_WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-$OPENCLAW_CONFIG_DIR/workspace}"OPENCLAW_PODMAN_IMAGE="${OPENCLAW_PODMAN_IMAGE:-${OPENCLAW_IMAGE:-openclaw:local}}" podman run --rm -it \ --userns=keep-id \ --user "$(id -u):$(id -g)" \ -e HOME=/home/node \ -e NPM_CONFIG_CACHE=/home/node/.openclaw/.npm \ -v "$OPENCLAW_CONFIG_DIR:/home/node/.openclaw:rw" \ -v "$OPENCLAW_WORKSPACE_DIR:/home/node/.openclaw/workspace:rw" \ "$OPENCLAW_PODMAN_IMAGE" \ openclaw doctor --fixFügen Sie auf SELinux-Hosts beiden Bind-Mounts ,Z hinzu, wenn Podman den Zugriff auf den
gemounteten Zustand blockiert.
Nützliche Befehle
- Containerprotokolle:
podman logs -f openclaw - Container stoppen:
podman stop openclaw - Container entfernen:
podman rm -f openclaw - Dashboard-URL über die Host-CLI öffnen:
openclaw dashboard --no-open - Integrität/Status über die Host-CLI:
openclaw gateway status --deep(RPC-Prüfung + zusätzliche Dienstsuche)
Fehlerbehebung
- Zugriff verweigert (EACCES) für Konfiguration oder Arbeitsbereich: Der Container wird standardmäßig mit
--userns=keep-idund--user <your uid>:<your gid>ausgeführt. Stellen Sie sicher, dass die Konfigurations-/Arbeitsbereichspfade auf dem Host Ihrem aktuellen Benutzer gehören. - Gateway-Start blockiert (fehlendes
gateway.mode=local): Stellen Sie sicher, dass~/.openclaw/openclaw.jsonvorhanden ist undgateway.mode="local"festlegt.scripts/podman/setup.sherstellt dies, falls es fehlt. - Container startet nach einer Image-Aktualisierung neu: Führen Sie den einmaligen
openclaw doctor --fix-Befehl unter Images aktualisieren aus und starten Sie anschließend das Gateway erneut. - CLI-Befehle im Container verwenden das falsche Ziel: Verwenden Sie
openclaw --container <name> ...explizit oder exportieren SieOPENCLAW_CONTAINER=<name>in Ihrer Shell. openclaw updateschlägt mit--containerfehl: Erwartetes Verhalten. Bauen Sie das Image neu oder rufen Sie es erneut ab und starten Sie anschließend den Container oder den Quadlet-Dienst neu.- Quadlet-Dienst startet nicht: Führen Sie
systemctl --user daemon-reloadund anschließendsystemctl --user start openclaw.serviceaus. Auf Headless-Systemen benötigen Sie möglicherweise zusätzlichsudo loginctl enable-linger "$(whoami)". - SELinux blockiert Bind-Mounts: Behalten Sie das standardmäßige Mount-Verhalten bei; der Launcher fügt unter Linux automatisch
:Zhinzu, wenn SELinux im Enforcing- oder Permissive-Modus ausgeführt wird.