Docker (facultatif)
Docker est facultatif. Utilisez-le uniquement si vous voulez une passerelle conteneurisée ou valider le flux Docker.Docker est-il fait pour moi ?
- Oui : vous voulez un environnement de passerelle isolé et jetable, ou exécuter OpenClaw sur un hôte sans installations locales.
- Non : vous travaillez sur votre propre machine et voulez simplement la boucle de développement la plus rapide. Utilisez plutôt le flux d’installation normal.
- Note sur le sandboxing : le sandboxing des agents utilise aussi Docker, mais il n’exige pas que la passerelle complète s’exécute dans Docker. Voir Sandboxing.
- Passerelle conteneurisée (OpenClaw complet dans Docker)
- Sandbox d’agent par session (passerelle sur l’hôte + outils d’agent isolés par Docker)
Exigences
- Docker Desktop (ou Docker Engine) + Docker Compose v2
- Espace disque suffisant pour les images et les journaux
Passerelle conteneurisée (Docker Compose)
Demarrage rapide (recommandé)
Depuis la racine du dépôt :- construit l’image de la passerelle
- exécute l’assistant d’intégration
- affiche des conseils facultatifs de configuration des fournisseurs
- démarre la passerelle via Docker Compose
- génère un jeton de passerelle et l’écrit dans
.env
OPENCLAW_DOCKER_APT_PACKAGES— installer des paquets apt supplémentaires lors du buildOPENCLAW_EXTRA_MOUNTS— ajouter des montages bind hôte supplémentairesOPENCLAW_HOME_VOLUME— persister/home/nodedans un volume nommé
- Ouvrez
http://127.0.0.1:18789/dans votre navigateur. - Collez le jeton dans l’UI de contrôle (Settings → token).
- Besoin à nouveau de l’URL ? Exécutez
docker compose run --rm openclaw-cli dashboard --no-open.
~/.openclaw/~/.openclaw/workspace
Helpers Shell (optionnel)
Pour simplifier la gestion quotidienne de Docker, installezClawDock :
clawdock-start, clawdock-stop, clawdock-dashboard, etc. Exécutez clawdock-help pour voir toutes les commandes.
Consultez le ClawDock Helper README pour plus de détails.
Flux manuel (compose)
docker compose ... depuis la racine du dépôt. Si vous avez activé
OPENCLAW_EXTRA_MOUNTS ou OPENCLAW_HOME_VOLUME, le script de configuration écrit
docker-compose.extra.yml ; incluez-le lorsque vous exécutez Compose ailleurs :
Jeton de l’UI de contrôle + appairage (Docker)
Si vous voyez « unauthorized » ou « disconnected (1008): pairing required », récupérez un nouveau lien de tableau de bord et approuvez l’appareil navigateur :Montages supplémentaires (facultatif)
Si vous voulez monter des répertoires hôte supplémentaires dans les conteneurs, définissezOPENCLAW_EXTRA_MOUNTS avant d’exécuter docker-setup.sh. Cela accepte une liste séparée par des
virgules de montages bind Docker et les applique à la fois à
openclaw-gateway et openclaw-cli en générant docker-compose.extra.yml.
Exemple :
- Les chemins doivent être partagés avec Docker Desktop sur macOS/Windows.
- Si vous modifiez
OPENCLAW_EXTRA_MOUNTS, relancezdocker-setup.shpour régénérer le fichier compose supplémentaire. docker-compose.extra.ymlest généré. Ne l’éditez pas à la main.
Persister l’intégralité du home du conteneur (facultatif)
Si vous voulez que/home/node persiste lors de la recréation des conteneurs, définissez un
volume nommé via OPENCLAW_HOME_VOLUME. Cela crée un volume Docker et le monte sur
/home/node, tout en conservant les montages bind standards de config/espace de travail. Utilisez ici un volume nommé (pas un chemin bind) ; pour les montages bind, utilisez
OPENCLAW_EXTRA_MOUNTS.
Exemple :
- Si vous changez
OPENCLAW_HOME_VOLUME, relancezdocker-setup.shpour régénérer le fichier compose supplémentaire. - Le volume nommé persiste jusqu’à sa suppression avec
docker volume rm <name>.
Installer des paquets apt supplémentaires (facultatif)
Si vous avez besoin de paquets système dans l’image (par exemple des outils de build ou des bibliothèques multimédias), définissezOPENCLAW_DOCKER_APT_PACKAGES avant d’exécuter docker-setup.sh.
Cela installe les paquets pendant le build de l’image, de sorte qu’ils persistent même si le
conteneur est supprimé.
Exemple :
- Accepte une liste de noms de paquets apt séparés par des espaces.
- Si vous modifiez
OPENCLAW_DOCKER_APT_PACKAGES, relancezdocker-setup.shpour reconstruire l’image.
Conteneur « power-user » / fonctionnalités complètes (opt-in)
L’image Docker par défaut est axée sécurité et s’exécute en tant qu’utilisateur non-rootnode. Cela réduit la surface d’attaque, mais implique :
- pas d’installation de paquets système à l’exécution
- pas de Homebrew par défaut
- pas de navigateurs Chromium/Playwright inclus
- Persister
/home/nodeafin que les téléchargements de navigateurs et les caches d’outils survivent :
- Intégrer les dépendances système dans l’image (répétable + persistant) :
- Installer les navigateurs Playwright sans
npx(évite les conflits d’override npm) :
OPENCLAW_DOCKER_APT_PACKAGES au lieu d’utiliser --with-deps à l’exécution.
- Persister les téléchargements de navigateurs Playwright :
- Définissez
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightdansdocker-compose.yml. - Assurez-vous que
/home/nodepersiste viaOPENCLAW_HOME_VOLUME, ou montez/home/node/.cache/ms-playwrightviaOPENCLAW_EXTRA_MOUNTS.
Permissions + EACCES
L’image s’exécute en tant quenode (uid 1000). Si vous voyez des erreurs de
permissions sur /home/node/.openclaw, assurez-vous que vos montages bind hôte appartiennent à l’uid 1000.
Exemple (hôte Linux) :
Rebuilds plus rapides (recommandé)
Pour accélérer les rebuilds, ordonnez votre Dockerfile de sorte que les couches de dépendances soient mises en cache. Cela évite de relancerpnpm install tant que les lockfiles ne changent
pas :
Configuration des canaux (facultatif)
Utilisez le conteneur CLI pour configurer les canaux, puis redémarrez la passerelle si nécessaire. WhatsApp (QR) :OAuth OpenAI Codex (Docker headless)
Si vous choisissez OAuth OpenAI Codex dans l’assistant, il ouvre une URL de navigateur et tente de capturer un callback surhttp://127.0.0.1:1455/auth/callback. Dans Docker ou des configurations headless, ce
callback peut afficher une erreur de navigateur. Copiez l’URL de redirection complète sur
laquelle vous arrivez et collez-la dans l’assistant pour terminer l’authentification.
Bilan de santé
Test de fumée E2E (Docker)
Test de fumée d’import QR (Docker)
Notes
- Le bind de la passerelle utilise par défaut
lanpour l’usage en conteneur. - Le CMD du Dockerfile utilise
--allow-unconfigured; une configuration montée avecgateway.modeet nonlocaldémarrera quand même. Surchargez CMD pour imposer la garde. - Le conteneur de passerelle est la source de vérité pour les sessions (
~/.openclaw/agents/<agentId>/sessions/).
Sandbox d’agent (passerelle sur l’hôte + outils Docker)
Approfondissement : SandboxingCe que cela fait
Lorsqueagents.defaults.sandbox est activé, les sessions non principales exécutent les outils dans
un conteneur Docker. La passerelle reste sur votre hôte, mais l’exécution des outils est
isolée :
- portée :
"agent"par défaut (un conteneur + espace de travail par agent) - portée :
"session"pour une isolation par session - dossier d’espace de travail par portée monté sur
/workspace - accès facultatif à l’espace de travail de l’agent (
agents.defaults.sandbox.workspaceAccess) - politique d’outils autoriser/refuser (le refus l’emporte)
- les médias entrants sont copiés dans l’espace de travail actif du sandbox
(
media/inbound/*) afin que les outils puissent les lire (avecworkspaceAccess: "rw", cela arrive dans l’espace de travail de l’agent)
scope: "shared" désactive l’isolation inter-sessions. Toutes les sessions
partagent un conteneur et un espace de travail.
Profils de sandbox par agent (multi-agent)
Si vous utilisez le routage multi-agent, chaque agent peut surcharger les paramètres de sandbox et d’outils :agents.list[].sandbox et agents.list[].tools (plus agents.list[].tools.sandbox.tools). Cela permet
d’exécuter des niveaux d’accès mixtes dans une même passerelle :
- Accès complet (agent personnel)
- Outils en lecture seule + espace de travail en lecture seule (agent famille/travail)
- Aucun outil de système de fichiers/shell (agent public)
Comportement par défaut
- Image :
openclaw-sandbox:bookworm-slim - Un conteneur par agent
- Accès à l’espace de travail de l’agent :
workspaceAccess: "none"(par défaut) utilise~/.openclaw/sandboxes"ro"conserve l’espace de travail du sandbox sur/workspaceet monte l’espace de travail de l’agent en lecture seule sur/agent(désactivewrite/edit/apply_patch)"rw"monte l’espace de travail de l’agent en lecture/écriture sur/workspace
- Auto-prune : inactif > 24 h OU âge > 7 j
- Réseau :
nonepar défaut (opt-in explicite si vous avez besoin de sortie) - Autorisations par défaut :
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - Refus par défaut :
browser,canvas,nodes,cron,discord,gateway
Activer le sandboxing
Si vous prévoyez d’installer des paquets danssetupCommand, notez :
- Le
docker.networkpar défaut est"none"(pas de sortie). readOnlyRoot: truebloque les installations de paquets.userdoit être root pourapt-get(omettreuserou définiruser: "0:0"). OpenClaw recrée automatiquement les conteneurs lorsquesetupCommand(ou la config Docker) change, sauf si le conteneur a été utilisé récemment (dans les ~5 minutes). Les conteneurs « chauds » consignent un avertissement avec la commandeopenclaw sandbox recreate ...exacte.
agents.defaults.sandbox.docker :
network, user, pidsLimit, memory, memorySwap,
cpus, ulimits, seccompProfile, apparmorProfile,
dns, extraHosts.
Multi-agent : surchargez agents.defaults.sandbox.{docker,browser,prune}.* par agent via agents.list[].sandbox.{docker,browser,prune}.*
(ignoré lorsque agents.defaults.sandbox.scope / agents.list[].sandbox.scope est "shared").
Construire l’image de sandbox par défaut
openclaw-sandbox:bookworm-slim en utilisant Dockerfile.sandbox.
Image commune de sandbox (facultatif)
Si vous voulez une image de sandbox avec des outils de build courants (Node, Go, Rust, etc.), construisez l’image commune :openclaw-sandbox-common:bookworm-slim. Pour l’utiliser :
Image de navigateur de sandbox
Pour exécuter l’outil de navigateur dans le sandbox, construisez l’image de navigateur :openclaw-sandbox-browser:bookworm-slim en utilisant
Dockerfile.sandbox-browser. Le conteneur exécute Chromium avec CDP activé et
un observateur noVNC facultatif (headful via Xvfb).
Notes :
- Le mode headful (Xvfb) réduit le blocage des bots par rapport au headless.
- Le mode headless peut toujours être utilisé en définissant
agents.defaults.sandbox.browser.headless=true. - Aucun environnement de bureau complet (GNOME) n’est nécessaire ; Xvfb fournit l’affichage.
- une URL de contrôle du navigateur sandbox (pour l’outil
browser) - une URL noVNC (si activée et headless=false)
browser (et
retirez-le du refus) sinon l’outil reste bloqué.
Les règles de purge (agents.defaults.sandbox.prune) s’appliquent aussi aux conteneurs de navigateur.
Image de sandbox personnalisée
Construisez votre propre image et pointez la configuration dessus :Politique d’outils (autoriser/refuser)
denyl’emporte surallow.- Si
allowest vide : tous les outils (sauf ceux refusés) sont disponibles. - Si
allown’est pas vide : seuls les outils dansallowsont disponibles (moins ceux refusés).
Stratégie de purge
Deux paramètres :prune.idleHours: supprimer les conteneurs non utilisés depuis X heures (0 = désactiver)prune.maxAgeDays: supprimer les conteneurs plus anciens que X jours (0 = désactiver)
- Conserver les sessions actives mais plafonner la durée de vie :
idleHours: 24,maxAgeDays: 7 - Ne jamais purger :
idleHours: 0,maxAgeDays: 0
Notes de sécurité
- La barrière dure s’applique uniquement aux outils (exec/read/write/edit/apply_patch).
- Les outils côté hôte comme browser/camera/canvas sont bloqués par défaut.
- Autoriser
browserdans le sandbox brise l’isolation (le navigateur s’exécute sur l’hôte).
Problemes courants
- Image manquante : construisez-la avec
scripts/sandbox-setup.shou définissezagents.defaults.sandbox.docker.image. - Conteneur non démarré : il sera créé automatiquement par session à la demande.
- Erreurs de permissions dans le sandbox : définissez
docker.usersur un UID:GID qui correspond au propriétaire de votre espace de travail monté (ou faites un chown du dossier d’espace de travail). - Outils personnalisés introuvables : OpenClaw exécute les commandes avec
sh -lc(login shell), qui source/etc/profileet peut réinitialiser PATH. Définissezdocker.env.PATHpour préfixer vos chemins d’outils personnalisés (par exemple,/custom/bin:/usr/local/share/npm-global/bin), ou ajoutez un script sous/etc/profile.d/dans votre Dockerfile.