Containers
Podman
Esegui il Gateway OpenClaw in un container Podman rootless, gestito dal tuo attuale utente non root.
Il modello previsto è:
- Podman esegue il container del gateway.
- La CLI
openclawdell'host è il piano di controllo. - Lo stato persistente risiede sull'host in
~/.openclawper impostazione predefinita. - La gestione quotidiana usa
openclaw --container <name> ...invece disudo -u openclaw,podman execo un utente di servizio separato.
Prerequisiti
- Podman in modalità rootless
- CLI OpenClaw installata sull'host
- Opzionale:
systemd --userse vuoi l'avvio automatico gestito da Quadlet - Opzionale:
sudosolo se vuoiloginctl enable-linger "$(whoami)"per la persistenza all'avvio su un host headless
Avvio rapido
Configurazione una tantum
Dalla radice del repository, esegui ./scripts/podman/setup.sh.
Avviare il container del Gateway
Avvia il container con ./scripts/run-openclaw-podman.sh launch.
Eseguire l'onboarding dentro il container
Esegui ./scripts/run-openclaw-podman.sh launch setup, quindi apri http://127.0.0.1:18789/.
Gestire il container in esecuzione dalla CLI dell'host
Imposta OPENCLAW_CONTAINER=openclaw, quindi usa i normali comandi openclaw dall'host.
Dettagli della configurazione:
./scripts/podman/setup.shcompilaopenclaw:localnel tuo store Podman rootless per impostazione predefinita, oppure usaOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEse ne imposti uno.- Crea
~/.openclaw/openclaw.jsoncongateway.mode: "local"se manca. - Crea
~/.openclaw/.envconOPENCLAW_GATEWAY_TOKENse manca. - Per gli avvii manuali, l'helper legge solo una piccola allowlist di chiavi relative a Podman da
~/.openclaw/.enve passa variabili di ambiente di runtime esplicite al container; non passa l'intero file env a Podman.
Configurazione gestita da Quadlet:
./scripts/podman/setup.sh --quadletQuadlet è un'opzione disponibile solo su Linux perché dipende dai servizi utente systemd.
Puoi anche impostare OPENCLAW_PODMAN_QUADLET=1.
Variabili env opzionali di build/configurazione:
OPENCLAW_IMAGEoOPENCLAW_PODMAN_IMAGE-- usa un'immagine esistente/scaricata invece di compilareopenclaw:localOPENCLAW_IMAGE_APT_PACKAGES-- installa pacchetti apt aggiuntivi durante la build dell'immagine (accetta anche il legacyOPENCLAW_DOCKER_APT_PACKAGES)OPENCLAW_IMAGE_PIP_PACKAGES-- installa pacchetti Python aggiuntivi durante la build dell'immagine; blocca le versioni e usa solo indici di pacchetti di cui ti fidiOPENCLAW_EXTENSIONS-- preinstalla le dipendenze dei Plugin in fase di buildOPENCLAW_INSTALL_BROWSER-- preinstalla Chromium e Xvfb per l'automazione del browser (imposta a1per abilitare)
Avvio del container:
./scripts/run-openclaw-podman.sh launchLo script avvia il container con il tuo uid/gid corrente usando --userns=keep-id e monta in bind lo stato OpenClaw nel container.
Onboarding:
./scripts/run-openclaw-podman.sh launch setupQuindi apri http://127.0.0.1:18789/ e usa il token da ~/.openclaw/.env.
Autenticazione dei modelli in Podman:
- Usa l'autenticazione gestita da OpenClaw durante la configurazione: chiavi API Anthropic per Anthropic, oppure autenticazione OAuth/device-code da browser OpenAI Codex per OpenAI basato su Codex.
- Il launcher Podman non monta le directory delle credenziali della CLI dell'host, come
~/.claudeo~/.codex, nel container di configurazione o del gateway. - Gli accessi CLI esistenti sull'host sono percorsi di comodità sullo stesso host. Per le installazioni in container, mantieni l'autenticazione del provider nello stato montato
~/.openclawgestito dalla configurazione.
Predefinito della CLI host:
export OPENCLAW_CONTAINER=openclawQuindi comandi come questi verranno eseguiti automaticamente dentro quel container:
openclaw dashboard --no-openopenclaw gateway status --deep # includes extra service scanopenclaw doctoropenclaw channels loginSu macOS, la macchina Podman può far apparire il browser come non locale al gateway. Se la Control UI segnala errori di autenticazione del dispositivo dopo l'avvio, usa le indicazioni su Tailscale in Podman e Tailscale.
Podman e Tailscale
Per HTTPS o accesso remoto dal browser, segui la documentazione principale di Tailscale.
Nota specifica per Podman:
- Mantieni l'host di pubblicazione Podman su
127.0.0.1. - Preferisci
tailscale servegestito dall'host rispetto aopenclaw gateway --tailscale serve. - Su macOS, se il contesto di autenticazione del dispositivo del browser locale non è affidabile, usa l'accesso Tailscale invece di workaround locali ad hoc con tunnel.
Vedi:
Systemd (Quadlet, opzionale)
Se hai eseguito ./scripts/podman/setup.sh --quadlet, la configurazione installa un file Quadlet in:
~/.config/containers/systemd/openclaw.containerComandi utili:
- Avvia:
systemctl --user start openclaw.service - Arresta:
systemctl --user stop openclaw.service - Stato:
systemctl --user status openclaw.service - Log:
journalctl --user -u openclaw.service -f
Dopo aver modificato il file Quadlet:
systemctl --user daemon-reloadsystemctl --user restart openclaw.servicePer la persistenza all'avvio su host SSH/headless, abilita il lingering per il tuo utente corrente:
sudo loginctl enable-linger "$(whoami)"Configurazione, env e archiviazione
- Directory di configurazione:
~/.openclaw - Directory del workspace:
~/.openclaw/workspace - File del token:
~/.openclaw/.env - Helper di avvio:
./scripts/run-openclaw-podman.sh
Lo script di avvio e Quadlet montano in bind lo stato dell'host nel container:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
Per impostazione predefinita sono directory dell'host, non stato anonimo del container, quindi
openclaw.json, auth-profiles.json per agente, stato di canali/provider,
sessioni e workspace sopravvivono alla sostituzione del container.
La configurazione Podman inizializza anche gateway.controlUi.allowedOrigins per 127.0.0.1 e localhost sulla porta gateway pubblicata, così la dashboard locale funziona con il bind non local loopback del container.
Variabili env utili per il launcher manuale:
OPENCLAW_PODMAN_CONTAINER-- nome del container (openclawper impostazione predefinita)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE-- immagine da eseguireOPENCLAW_PODMAN_GATEWAY_HOST_PORT-- porta host mappata alla porta container18789OPENCLAW_PODMAN_BRIDGE_HOST_PORT-- porta host mappata alla porta container18790OPENCLAW_PODMAN_PUBLISH_HOST-- interfaccia host per le porte pubblicate; il valore predefinito è127.0.0.1OPENCLAW_GATEWAY_BIND-- modalità di bind del gateway dentro il container; il valore predefinito èlanOPENCLAW_PODMAN_USERNS--keep-id(predefinito),autoohost
Il launcher manuale legge ~/.openclaw/.env prima di finalizzare i valori predefiniti di container/immagine, quindi puoi persisterli lì.
Se usi un valore non predefinito di OPENCLAW_CONFIG_DIR o OPENCLAW_WORKSPACE_DIR, imposta le stesse variabili sia per ./scripts/podman/setup.sh sia per i successivi comandi ./scripts/run-openclaw-podman.sh launch. Il launcher locale del repository non persiste gli override di percorso personalizzati tra shell.
Nota su Quadlet:
- Il servizio Quadlet generato mantiene intenzionalmente una forma predefinita fissa e rinforzata: porte pubblicate su
127.0.0.1,--bind landentro il container e namespace utentekeep-id. - Imposta
OPENCLAW_NO_RESPAWN=1,Restart=on-failureeTimeoutStartSec=300. - Pubblica sia
127.0.0.1:18789:18789(gateway) sia127.0.0.1:18790:18790(bridge). - Legge
~/.openclaw/.envcomeEnvironmentFiledi runtime per valori comeOPENCLAW_GATEWAY_TOKEN, ma non consuma la allowlist di override specifici per Podman del launcher manuale. - Se ti servono porte di pubblicazione, host di pubblicazione o altri flag di esecuzione del container personalizzati, usa il launcher manuale o modifica direttamente
~/.config/containers/systemd/openclaw.container, quindi ricarica e riavvia il servizio.
Comandi utili
- Log del container:
podman logs -f openclaw - Arresta il container:
podman stop openclaw - Rimuovi il container:
podman rm -f openclaw - Apri l'URL della dashboard dalla CLI host:
openclaw dashboard --no-open - Salute/stato tramite CLI host:
openclaw gateway status --deep(probe RPC + scansione aggiuntiva del servizio)
Risoluzione dei problemi
- Permesso negato (EACCES) su configurazione o workspace: Il container viene eseguito con
--userns=keep-ide--user <your uid>:<your gid>per impostazione predefinita. Assicurati che i percorsi di configurazione/workspace sull'host appartengano al tuo utente corrente. - Avvio del Gateway bloccato (
gateway.mode=localmancante): Assicurati che~/.openclaw/openclaw.jsonesista e impostigateway.mode="local".scripts/podman/setup.shlo crea se manca. - I comandi CLI del container raggiungono il target sbagliato: Usa esplicitamente
openclaw --container <name> ..., oppure esportaOPENCLAW_CONTAINER=<name>nella tua shell. openclaw updatefallisce con--container: Previsto. Ricompila/scarica l'immagine, quindi riavvia il container o il servizio Quadlet.- Il servizio Quadlet non si avvia: Esegui
systemctl --user daemon-reload, quindisystemctl --user start openclaw.service. Sui sistemi headless potresti anche aver bisogno disudo loginctl enable-linger "$(whoami)". - SELinux blocca i mount bind: Lascia invariato il comportamento di mount predefinito; il launcher aggiunge automaticamente
:Zsu Linux quando SELinux è in modalità enforcing o permissive.