agents.defaults.sandbox è abilitato, ma il sandboxing è disattivato per impostazione predefinita e non richiede che il Gateway stesso venga eseguito in Docker. Sono disponibili anche i backend sandbox SSH e OpenShell; vedere Sandboxing.
Si ospitano più utenti? Vedere Hosting multi-tenant per il modello con una cella per tenant.
Prerequisiti
- Docker Desktop (o Docker Engine) + Docker Compose v2
- Almeno 2 GB di RAM per la creazione dell’immagine (
pnpm installpotrebbe essere terminato per esaurimento della memoria negli host con 1 GB, con codice di uscita 137) - Spazio su disco sufficiente per immagini e log
- Su un VPS/host pubblico, consultare Rafforzamento della sicurezza per l’esposizione di rete, in particolare la catena firewall Docker
DOCKER-USER
Gateway in container
Creare l'immagine
openclaw:local. Per utilizzare invece un’immagine precompilata:openclaw/openclaw:ghcr.io/openclaw/openclaw o openclaw/openclaw ed evitare i mirror non ufficiali, che non condividono la pianificazione dei rilasci o i criteri di conservazione di OpenClaw. Tag ufficiali: main, latest, <version> (ad es. 2026.2.26) e tag beta come 2026.2.26-beta.1 (le versioni beta non spostano mai latest/main). L’immagine predefinita main/latest/<version> include i plugin codex e diagnostics-otel. Viene inoltre distribuita una variante -browser (ad es. latest-browser) che include Chromium, utile per lo strumento browser in sandbox senza dover installare Playwright al primo avvio.Rieseguire in un ambiente isolato dalla rete
--offline verifica che OPENCLAW_IMAGE esista già localmente, disabilita i pull e le build implicite di Compose, quindi esegue il flusso normale: sincronizzazione di .env, correzioni delle autorizzazioni, onboarding, sincronizzazione della configurazione del Gateway e avvio di Compose.Se OPENCLAW_SANDBOX=1, la configurazione offline verifica anche le immagini sandbox predefinite e specifiche per agente configurate sul daemon associato a OPENCLAW_DOCKER_SOCKET, inclusa l’etichetta del contratto del browser nelle immagini browser basate su Docker. Se un’immagine richiesta manca o è obsoleta, la configurazione termina senza modificare la configurazione della sandbox, anziché segnalare erroneamente un esito positivo.Completare l'onboarding
- richiede le chiavi API del provider
- genera un token del Gateway e lo scrive in
.env - crea la directory della chiave segreta del profilo di autenticazione
- avvia il Gateway tramite Docker Compose
openclaw-gateway (con --no-deps --entrypoint node), poiché openclaw-cli condivide lo spazio dei nomi di rete del Gateway e funziona solo dopo la creazione del container del Gateway.Aprire l'interfaccia di controllo
http://127.0.0.1:18789/ e incollare in Settings il token scritto in .env. Se l’autenticazione del container è stata impostata tramite password, utilizzare invece tale password.Serve nuovamente l’URL?Flusso manuale
.git. Passare l’identità del sorgente come argomenti di build,
come mostrato sopra, affinché la schermata Informazioni dell’immagine riporti il commit estratto e
un singolo timestamp di build. scripts/docker/setup.sh risolve e passa automaticamente
entrambi i valori.
docker compose dalla radice del repository. Se è stato abilitato OPENCLAW_EXTRA_MOUNTS o OPENCLAW_HOME_VOLUME, lo script di configurazione scrive docker-compose.extra.yml; includerlo dopo qualsiasi docker-compose.override.yml gestito autonomamente, ad es. -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.extra.yml.Aggiornamento delle immagini dei container
Quando si sostituisce l’immagine OpenClaw mantenendo lo stesso stato e la stessa configurazione montati, il nuovo Gateway esegue migrazioni di aggiornamento sicure all’avvio e la convergenza dei plugin prima di risultare pronto. Gli aggiornamenti ordinari delle immagini non dovrebbero richiedere un’esecuzione separata diopenclaw doctor --fix.
Se all’avvio non è possibile completare queste riparazioni in modo sicuro, il Gateway termina anziché
segnalare uno stato integro. In presenza di un criterio di riavvio, Docker, Podman o Kubernetes potrebbero mostrare
il riavvio del container del Gateway. Mantenere montato il volume di stato, quindi eseguire
una volta la stessa immagine con openclaw doctor --fix come comando del container, utilizzando gli
stessi montaggi di stato/configurazione utilizzati dal Gateway:
Variabili di ambiente
Variabili facoltative accettate dascripts/docker/setup.sh (e, per il container del Gateway, direttamente da docker-compose.yml):
brew; fornire tali dipendenze tramite un’immagine personalizzata oppure installarle manualmente. Utilizzare OPENCLAW_IMAGE_APT_PACKAGES per le dipendenze distribuite come pacchetti Debian e OPENCLAW_IMAGE_PIP_PACKAGES per le dipendenze Python (esegue python3 -m pip install --break-system-packages durante la build, quindi fissare le versioni e utilizzare esclusivamente indici attendibili).
Se Docker segnala ResourceExhausted, cannot allocate memory o si interrompe durante tsdown, aumentare il limite di memoria del builder Docker oppure riprovare con heap espliciti più piccoli:
Immagini create dai sorgenti con plugin selezionati
OPENCLAW_EXTENSIONS seleziona gli ID dei manifest dei plugin dal checkout sorgente;
sono accettati anche i nomi esistenti delle directory sorgente quando differiscono. La build Docker
risolve una sola volta la selezione nelle directory sorgente, installa le dipendenze
di produzione e, quando un plugin selezionato viene pubblicato separatamente con
openclaw.build.bundledDist: false, ne compila il runtime nella distribuzione
inclusa nel bundle principale. Questo processo di pacchettizzazione esclusivo di Docker non modifica il contratto dell’artefatto npm o ClawHub
del plugin. Gli ID sconosciuti, non validi o ambigui causano il fallimento della build dell’immagine.
Gli ID noti riservati alle dipendenze o al sorgente mantengono la gestione temporanea
esistente del sorgente e delle dipendenze senza ottenere una voce compilata nella distribuzione principale. Un plugin selezionato con
voci di build unificate deve essere compilato correttamente; il sorgente e l’output di runtime
dei plugin esterni non selezionati vengono rimossi.
Ad esempio, questi comandi creano immagini gateway FakeCo autonome,
separate e multiarchitettura per ClickClack, Slack e Microsoft Teams. ClawRouter fa
già parte del runtime principale di OpenClaw, quindi l’immagine ClickClack seleziona solo
clickclack. L’argomento esplicitamente vuoto per il browser mantiene l’immagine predefinita priva
di Chromium:
--platform linux/arm64 --load o --platform linux/amd64 --load per una
singola build locale nativa. L’output multipiattaforma e le attestazioni SBOM/provenienza
allegate richiedono un registro o un altro output Buildx che conservi le attestazioni. Dopo
il push, esaminare il manifest e distribuire il digest immutabile anziché il
tag SHA del sorgente modificabile:
OPENCLAW_EXTRA_MOUNTS=/path/to/fork/extensions/synology-chat:/app/extensions/synology-chat:ro. Ciò sostituisce il bundle compilato /app/dist/extensions/synology-chat corrispondente per lo stesso ID plugin.
Osservabilità
L’esportazione OpenTelemetry è in uscita dal contenitore Gateway verso il collector OTLP; non richiede la pubblicazione di alcuna porta Docker. Per includere l’esportatore incluso nel bundle in un’immagine creata localmente:diagnostics-otel; installare autonomamente clawhub:@openclaw/diagnostics-otel solo se è stato rimosso. Per abilitare l’esportazione, consentire e abilitare il plugin diagnostics-otel nella configurazione, quindi impostare diagnostics.otel.enabled=true (vedere l’esempio completo in Esportazione OpenTelemetry). Le intestazioni di autenticazione del collector vengono gestite tramite diagnostics.otel.headers, non tramite variabili di ambiente Docker.
Le metriche Prometheus riutilizzano la porta Gateway già pubblicata. Installare clawhub:@openclaw/diagnostics-prometheus, abilitare il plugin diagnostics-prometheus, quindi eseguire lo scraping:
/metrics separata né un percorso di reverse proxy non autenticato. Vedere Metriche Prometheus.
Controlli di integrità
Endpoint di verifica del contenitore (nessuna autenticazione richiesta):HEALTHCHECK integrato nell’immagine interroga /healthz; i fallimenti ripetuti contrassegnano il contenitore come unhealthy, consentendo agli orchestratori di riavviarlo o sostituirlo.
Snapshot approfondito e autenticato dello stato di integrità:
LAN e loopback
scripts/docker/setup.sh usa come valore predefinito OPENCLAW_GATEWAY_BIND=lan, affinché http://127.0.0.1:18789 sull’host funzioni con la pubblicazione delle porte Docker.
lan(predefinito): il browser e la CLI dell’host possono raggiungere la porta pubblicata del gateway.loopback: solo i processi nello spazio dei nomi di rete del contenitore possono raggiungere direttamente il gateway.
gateway.bind (lan / loopback / custom / tailnet / auto), non alias dell’host come 0.0.0.0 o 127.0.0.1.Provider locali dell’host
All’interno del contenitore,127.0.0.1 indica il contenitore stesso, non l’host. Utilizzare host.docker.internal per i provider in esecuzione sull’host:
docker-compose.yml associa host.docker.internal al gateway dell’host su Docker Engine per Linux (Docker Desktop fornisce lo stesso alias su macOS/Windows). I servizi dell’host devono essere in ascolto su un indirizzo raggiungibile da Docker:
docker run? Aggiungere autonomamente la stessa associazione, ad esempio --add-host=host.docker.internal:host-gateway.
Backend Claude CLI in Docker
L’immagine ufficiale non preinstalla Claude Code. Installarlo ed effettuare l’accesso all’interno dell’utentenode del contenitore, quindi rendere persistente la home del contenitore affinché gli aggiornamenti dell’immagine non eliminino il binario o lo stato di autenticazione.
Per una nuova installazione, abilitare un volume /home/node persistente prima di eseguire la configurazione:
.env correnti: lo script di configurazione riscrive sempre .env utilizzando la shell corrente e i valori predefiniti, senza leggere autonomamente il file:
.env contiene valori che la shell non può importare, riesportare prima manualmente quelli utilizzati (OPENCLAW_IMAGE, porte, modalità di binding, percorsi personalizzati, OPENCLAW_EXTRA_MOUNTS, sandbox, esclusione dell’onboarding). L’overlay generato monta il volume home sia per openclaw-gateway sia per openclaw-cli; eseguire i comandi rimanenti con tale overlay (e prima docker-compose.override.yml, se utilizzato):
claude in /home/node/.local/bin/claude. Configurare OpenClaw affinché utilizzi tale percorso:
claude-cli incluso nel bundle:
OPENCLAW_HOME_VOLUME rende persistente l’installazione nativa in /home/node/.local/bin e /home/node/.local/share/claude, oltre alle impostazioni e all’autenticazione di Claude Code in /home/node/.claude e /home/node/.claude.json. Rendere persistente solo /home/node/.openclaw non è sufficiente; se si utilizza OPENCLAW_EXTRA_MOUNTS anziché un volume home, montare tutti questi percorsi Claude in entrambi i servizi.
Bonjour / mDNS
La rete bridge Docker generalmente non inoltra in modo affidabile il multicast Bonjour/mDNS (224.0.0.251:5353). Quando OPENCLAW_DISABLE_BONJOUR non è impostato, il plugin Bonjour incluso nel bundle disabilita automaticamente la pubblicizzazione LAN quando rileva di essere in esecuzione in un contenitore, evitando così un ciclo di arresti anomali dovuto ai tentativi ripetuti di inviare multicast scartato dal bridge. Impostare OPENCLAW_DISABLE_BONJOUR=1 per disabilitarlo forzatamente indipendentemente dal rilevamento oppure 0 per abilitarlo forzatamente (solo con rete host, macvlan o un’altra rete in cui è noto che il multicast mDNS funzioni).
Negli altri casi, per gli host Docker utilizzare l’URL Gateway pubblicato, Tailscale o DNS-SD geografico. Vedere Rilevamento Bonjour per le problematiche note e la risoluzione dei problemi.
Archiviazione e persistenza
Docker Compose monta tramite bindOPENCLAW_CONFIG_DIR in /home/node/.openclaw, OPENCLAW_WORKSPACE_DIR in /home/node/.openclaw/workspace e OPENCLAW_AUTH_PROFILE_SECRET_DIR in /home/node/.config/openclaw, affinché tali percorsi sopravvivano alla sostituzione del contenitore. Quando una variabile non è impostata, docker-compose.yml utilizza un percorso di fallback in ${HOME}, oppure /tmp se HOME stesso è assente, affinché docker compose up non generi mai una specifica del volume con un’origine vuota negli ambienti essenziali.
La directory di configurazione montata contiene:
openclaw.jsonper la configurazione del comportamentoagents/<agentId>/agent/auth-profiles.jsonper l’autenticazione OAuth/con chiave API archiviata dei provider.envper i segreti di runtime basati sull’ambiente, comeOPENCLAW_GATEWAY_TOKEN
OPENCLAW_CONFIG_DIR.
I plugin scaricabili installati archiviano lo stato dei pacchetti nella home OpenClaw montata, affinché i record di installazione e le directory principali dei pacchetti sopravvivano alla sostituzione del contenitore; l’avvio del gateway non rigenera gli alberi delle dipendenze dei plugin inclusi nel bundle.
Per tutti i dettagli sulla persistenza della macchina virtuale, vedere Runtime della VM Docker - Cosa viene mantenuto e dove.
Principali fonti di crescita dell’utilizzo del disco: media/, database SQLite per agente, trascrizioni JSONL delle sessioni precedenti, database SQLite condiviso dello stato, directory principali dei pacchetti dei plugin installati e log su file a rotazione in /tmp/openclaw/.
Helper della shell (facoltativi)
Per abbreviare i comandi quotidiani, installare ClawDock:scripts/shell-helpers/clawdock-helpers.sh, eseguire nuovamente il comando precedente affinché l’helper locale utilizzi il percorso corrente. Quindi usare clawdock-start, clawdock-stop, clawdock-dashboard, ecc. (eseguire clawdock-help per l’elenco completo).
Abilitare la sandbox dell'agente per il Gateway Docker
Abilitare la sandbox dell'agente per il Gateway Docker
docker.sock solo dopo che i prerequisiti della sandbox sono stati soddisfatti. Se la configurazione della sandbox non può essere completata, reimposta agents.defaults.sandbox.mode su off. La modalità codice di Codex è disabilitata per i turni in cui la sandbox di OpenClaw è attiva (vedere Sandboxing § Backend Docker); non montare mai il socket Docker dell’host nei container sandbox degli agenti.Automazione / CI (non interattiva)
Automazione / CI (non interattiva)
-T:Nota sulla sicurezza della rete condivisa
Nota sulla sicurezza della rete condivisa
openclaw-cli usa network_mode: "service:openclaw-gateway" affinché i comandi della CLI possano raggiungere il Gateway tramite 127.0.0.1. Considerarlo un confine di attendibilità condiviso. La configurazione Compose rimuove NET_RAW/NET_ADMIN e abilita no-new-privileges sia su openclaw-gateway sia su openclaw-cli.Errori DNS di Docker Desktop in openclaw-cli
Errori DNS di Docker Desktop in openclaw-cli
openclaw-cli della rete condivisa non riescono dopo la rimozione di NET_RAW, manifestandosi come EAI_AGAIN durante comandi basati su npm come openclaw plugins install. Mantenere il file Compose predefinito con protezioni avanzate per il normale funzionamento. L’override seguente ripristina le funzionalità predefinite solo per il container openclaw-cli: usarlo per il singolo comando che richiede l’accesso al registro, non come invocazione predefinita:openclaw-cli a lunga esecuzione, ricrearlo con lo stesso override: docker compose exec/docker exec non possono modificare le funzionalità Linux di un container già creato.Autorizzazioni ed EACCES
Autorizzazioni ed EACCES
node (uid 1000). Se si verificano errori di autorizzazione su /home/node/.openclaw, assicurarsi che i bind mount dell’host appartengano all’uid 1000:blocked plugin candidate: suspicious ownership (... uid=1000, expected uid=0 or root) seguito da plugin present but blocked: l’uid del processo e il proprietario della directory del Plugin montata non corrispondono. È preferibile eseguire il processo con l’uid predefinito 1000 e correggere la proprietà del bind mount. Modificare il proprietario di /path/to/openclaw-config/npm in root:root solo se si intende eseguire OpenClaw come root a lungo termine.Ricompilazioni più rapide
Ricompilazioni più rapide
pnpm install a meno che i lockfile non cambino:Opzioni del container per utenti avanzati
Opzioni del container per utenti avanzati
node. Per un container con più funzionalità:- Rendere persistente
/home/node:export OPENCLAW_HOME_VOLUME="openclaw_home" - Integrare le dipendenze di sistema:
export OPENCLAW_IMAGE_APT_PACKAGES="git curl jq" - Integrare le dipendenze Python:
export OPENCLAW_IMAGE_PIP_PACKAGES="requests==2.32.5 humanize==4.14.0" - Integrare Playwright Chromium:
export OPENCLAW_INSTALL_BROWSER=1, oppure usare il tag ufficiale dell’immagine-browser - Oppure installare i browser Playwright in un volume persistente:
- Rendere persistenti i download dei browser: usare
OPENCLAW_HOME_VOLUMEoOPENCLAW_EXTRA_MOUNTS. OpenClaw rileva automaticamente su Linux il Chromium gestito da Playwright incluso nell’immagine.
OAuth OpenAI Codex (Docker headless)
OAuth OpenAI Codex (Docker headless)
Metadati dell'immagine di base
Metadati dell'immagine di base
node:24-bookworm-slim ed esegue tini come PID 1, in modo che i processi zombie vengano terminati e i segnali siano gestiti correttamente nei container a lunga esecuzione. Pubblica annotazioni dell’immagine di base OCI, incluse org.opencontainers.image.base.name e org.opencontainers.image.source. Dependabot aggiorna il digest fissato dell’immagine Node di base; le build di rilascio non eseguono un livello separato di aggiornamento della distribuzione. Vedere Annotazioni delle immagini OCI.Esecuzione su un VPS?
Vedere Hetzner (VPS Docker) e Runtime VM Docker per i passaggi di distribuzione su VM condivise, tra cui l’integrazione dei binari, la persistenza e gli aggiornamenti.Sandbox dell’agente
Quandoagents.defaults.sandbox è abilitato con il backend Docker, il Gateway esegue gli strumenti dell’agente (shell, lettura/scrittura di file, ecc.) all’interno di container Docker isolati, mentre il Gateway stesso rimane sull’host: una barriera rigida attorno alle sessioni degli agenti non attendibili o multi-tenant, senza inserire l’intero Gateway in un container.
L’ambito della sandbox può essere per agente (impostazione predefinita), per sessione o condiviso; ogni ambito dispone di un proprio spazio di lavoro montato in /workspace. È inoltre possibile configurare criteri di autorizzazione/negazione degli strumenti, isolamento della rete, limiti delle risorse e container per browser.
Per la configurazione completa, le immagini, le note sulla sicurezza e i profili multi-agente:
- Sandboxing — riferimento completo della sandbox
- OpenShell — accesso interattivo tramite shell ai container sandbox
- Sandbox e strumenti multi-agente — override per agente
Abilitazione rapida
docker build in linea.
Risoluzione dei problemi
Immagine mancante o container sandbox non avviato
Immagine mancante o container sandbox non avviato
scripts/sandbox-setup.sh (checkout del codice sorgente) o con il comando docker build in linea da Sandboxing § Immagini e configurazione (installazione npm), oppure impostare agents.defaults.sandbox.docker.image sull’immagine personalizzata. I container vengono creati automaticamente per ogni sessione, su richiesta.Errori di autorizzazione nella sandbox
Errori di autorizzazione nella sandbox
docker.user su un UID:GID corrispondente alla proprietà dello spazio di lavoro montato oppure modificare il proprietario della cartella dello spazio di lavoro.Strumenti personalizzati non trovati nella sandbox
Strumenti personalizzati non trovati nella sandbox
sh -lc (shell di login), che carica /etc/profile e potrebbe reimpostare PATH. Impostare docker.env.PATH per anteporre i percorsi degli strumenti personalizzati oppure aggiungere uno script in /etc/profile.d/ nel Dockerfile.Processo terminato per memoria esaurita durante la compilazione dell'immagine (codice di uscita 137)
Processo terminato per memoria esaurita durante la compilazione dell'immagine (codice di uscita 137)
Autorizzazione non riuscita o associazione richiesta nell'interfaccia di controllo
Autorizzazione non riuscita o associazione richiesta nell'interfaccia di controllo
La destinazione del Gateway mostra ws://172.x.x.x o la CLI Docker genera errori di associazione
La destinazione del Gateway mostra ws://172.x.x.x o la CLI Docker genera errori di associazione
Risorse correlate
- Panoramica dell’installazione — tutti i metodi di installazione
- Podman — alternativa a Docker basata su Podman
- ClawDock — configurazione Docker Compose della community
- Aggiornamento — mantenere OpenClaw aggiornato
- Configurazione — configurazione del Gateway dopo l’installazione