Containers
Podman
Esegui OpenClaw Gateway in un container Podman rootless, gestito dal tuo attuale utente non root.
Il modello previsto è:
- Podman esegue il container del Gateway.
- La
openclawCLI dell'host è il piano di controllo. - Per impostazione predefinita, lo stato persistente risiede sull'host in
~/.openclaw. - La gestione quotidiana usa
openclaw --container <name> ...invece disudo -u openclaw,podman execo un utente di servizio separato.
Prerequisiti
- Podman in modalità rootless
- OpenClaw CLI installata sull'host
- Facoltativo:
systemd --userse vuoi l'avvio automatico gestito da Quadlet - Facoltativo:
sudosolo se vuoiloginctl enable-linger "$(whoami)"per la persistenza all'avvio su un host headless
Avvio rapido
Configurazione una tantum
Dalla radice del repo, esegui ./scripts/podman/setup.sh.
Avvia il container del Gateway
Avvia il container con ./scripts/run-openclaw-podman.sh launch.
Esegui l'onboarding dentro il container
Esegui ./scripts/run-openclaw-podman.sh launch setup, poi apri http://127.0.0.1:18789/.
Gestisci il container in esecuzione dalla CLI dell'host
Imposta OPENCLAW_CONTAINER=openclaw, poi usa i normali comandi openclaw dall'host.
Dettagli di configurazione:
./scripts/podman/setup.shcreaopenclaw:localnel tuo store Podman rootless per impostazione predefinita, oppure usaOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEse ne imposti una.- 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 al container variabili env di runtime esplicite; non passa l'intero file env a Podman.
Configurazione gestita da Quadlet:
./scripts/podman/setup.sh --quadlet
Quadlet è un'opzione solo Linux perché dipende dai servizi utente systemd.
Puoi anche impostare OPENCLAW_PODMAN_QUADLET=1.
Variabili env facoltative per build/configurazione:
OPENCLAW_IMAGEoOPENCLAW_PODMAN_IMAGE-- usa un'immagine esistente/scaricata invece di crearereopenclaw:localOPENCLAW_DOCKER_APT_PACKAGES-- installa pacchetti apt aggiuntivi durante la build dell'immagineOPENCLAW_EXTENSIONS-- preinstalla le dipendenze dei plugin al momento della buildOPENCLAW_INSTALL_BROWSER-- preinstalla Chromium e Xvfb per l'automazione del browser (imposta a1per abilitare)
Avvio del container:
./scripts/run-openclaw-podman.sh launch
Lo script avvia il container con il tuo uid/gid attuale usando --userns=keep-id e monta in bind lo stato di OpenClaw nel container.
Onboarding:
./scripts/run-openclaw-podman.sh launch setup
Poi apri http://127.0.0.1:18789/ e usa il token da ~/.openclaw/.env.
Predefinito della CLI host:
export OPENCLAW_CONTAINER=openclaw
Poi comandi come questi verranno eseguiti automaticamente dentro quel container:
openclaw dashboard --no-open
openclaw gateway status --deep # includes extra service scan
openclaw doctor
openclaw channels login
Su 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 da 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 dispositivo del browser locale è inaffidabile, usa l'accesso tramite Tailscale invece di soluzioni alternative ad hoc con tunnel locali.
Vedi:
Systemd (Quadlet, facoltativo)
Se hai eseguito ./scripts/podman/setup.sh --quadlet, la configurazione installa un file Quadlet in:
~/.config/containers/systemd/openclaw.container
Comandi utili:
- Avvio:
systemctl --user start openclaw.service - Arresto:
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-reload
systemctl --user restart openclaw.service
Per la persistenza all'avvio su host SSH/headless, abilita il lingering per il tuo utente attuale:
sudo loginctl enable-linger "$(whoami)"
Configurazione, env e archiviazione
- Directory di configurazione:
~/.openclaw - Directory workspace:
~/.openclaw/workspace - File 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 queste sono directory host, non stato anonimo del container, quindi
openclaw.json, i file auth-profiles.json per agente, lo stato di canali/provider,
le sessioni e il 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 renderli persistenti lì.
Se usi un OPENCLAW_CONFIG_DIR o OPENCLAW_WORKSPACE_DIR non predefinito, 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 repo non persiste override di percorsi personalizzati tra shell.
Nota su Quadlet:
- Il servizio Quadlet generato mantiene intenzionalmente una forma predefinita fissa e rafforzata: 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 di Podman del launcher manuale. - Se ti servono porte di pubblicazione personalizzate, un host di pubblicazione personalizzato o altri flag di esecuzione del container, usa il launcher manuale oppure 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 - Integrità/stato tramite CLI host:
openclaw gateway status --deep(probe RPC + scansione extra 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 host di configurazione/workspace siano di proprietà del tuo utente attuale. - 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 updatenon riesce con--container: Previsto. Ricrea/scarica l'immagine, quindi riavvia il container o il servizio Quadlet.- Il servizio Quadlet non si avvia: Esegui
systemctl --user daemon-reload, poisystemctl --user start openclaw.service. Sui sistemi headless potrebbe servirti anchesudo loginctl enable-linger "$(whoami)". - SELinux blocca i mount bind: Lascia invariato il comportamento di mount predefinito; il launcher aggiunge automaticamente
:Zsu Linux quando SELinux è enforcing o permissive.