Docker (optional)
Docker ist optional. Verwenden Sie es nur, wenn Sie ein containerisiertes Gateway möchten oder den Docker-Flow validieren wollen.Ist Docker das Richtige für mich?
- Ja: Sie möchten eine isolierte, wegwerfbare Gateway-Umgebung oder OpenClaw auf einem Host ohne lokale Installationen betreiben.
- Nein: Sie arbeiten auf Ihrem eigenen Rechner und möchten einfach die schnellste Entwicklungs-Schleife. Verwenden Sie stattdessen den normalen Installations-Flow.
- Sandboxing-Hinweis: Agent-Sandboxing nutzt ebenfalls Docker, erfordert jedoch nicht, dass das gesamte Gateway in Docker läuft. Siehe Sandboxing.
- Containerisiertes Gateway (vollständiges OpenClaw in Docker)
- Pro-Sitzung Agent Sandbox (Gateway auf dem Host + Docker-isolierte Agent-Werkzeuge)
Anforderungen
- Docker Desktop (oder Docker Engine) + Docker Compose v2
- Ausreichend Speicherplatz für Images + Logs
Containerisiertes Gateway (Docker Compose)
Schnellstart (empfohlen)
Vom Repo-Root aus:- baut das Gateway-Image
- betreibt den Onboarding-Assistenten
- druckt optionale Einrichtungshinweise für Anbieter aus
- startet das Gateway über Docker Compose
- generiert ein Gateway-Token und schreibt es nach
.env
OPENCLAW_DOCKER_APT_PACKAGES— installiert zusätzliche apt-Pakete während des BuildsOPENCLAW_EXTRA_MOUNTS— fügt zusätzliche Host-Bind-Mounts hinzuOPENCLAW_HOME_VOLUME— persistiert/home/nodein einem benannten Volume
- Öffnen Sie
http://127.0.0.1:18789/in Ihrem Browser. - Fügen Sie das Token in der Control UI ein (Settings → token).
- Benötigen Sie die URL erneut? Führen Sie
docker compose run --rm openclaw-cli dashboard --no-openaus.
~/.openclaw/~/.openclaw/workspace
Shell-Helfer (optional)
Für eine einfachere tägliche Docker-Verwaltung installieren SieClawDock:
clawdock-start, clawdock-stop, clawdock-dashboard usw. Führen Sie clawdock-help aus, um alle Befehle anzuzeigen.
Siehe ClawDock Helper README für Details.
Manueller Flow (Compose)
docker compose ... vom Repo-Root aus aus. Wenn Sie
OPENCLAW_EXTRA_MOUNTS oder OPENCLAW_HOME_VOLUME aktiviert haben, schreibt das Setup-Skript
docker-compose.extra.yml; binden Sie diese Datei ein, wenn Sie Compose an anderer Stelle ausführen:
Control-UI-Token + Pairing (Docker)
Wenn Sie „unauthorized“ oder „disconnected (1008): pairing required“ sehen, rufen Sie einen neuen Dashboard-Link ab und genehmigen Sie das Browser-Gerät:Zusätzliche Mounts (optional)
Wenn Sie weitere Host-Verzeichnisse in die Container einbinden möchten, setzen SieOPENCLAW_EXTRA_MOUNTS, bevor Sie docker-setup.sh ausführen. Dies akzeptiert eine
kommagetrennte Liste von Docker-Bind-Mounts und wendet sie auf
openclaw-gateway und openclaw-cli an, indem docker-compose.extra.yml generiert wird.
Beispiel:
- Pfade müssen unter macOS/Windows für Docker Desktop freigegeben sein.
- Wenn Sie
OPENCLAW_EXTRA_MOUNTSbearbeiten, führen Siedocker-setup.sherneut aus, um die zusätzliche Compose-Datei neu zu generieren. docker-compose.extra.ymlwird generiert. Nicht manuell bearbeiten.
Gesamtes Container-Home persistent machen (optional)
Wenn/home/node über Container-Neuerstellungen hinweg erhalten bleiben soll, setzen Sie ein
benanntes Volume über OPENCLAW_HOME_VOLUME. Dadurch wird ein Docker-Volume erstellt und unter
/home/node eingehängt, während die Standard-Bind-Mounts für Konfiguration/Workspace
beibehalten werden. Verwenden Sie hier ein benanntes Volume (kein Bind-Pfad); für Bind-Mounts
verwenden Sie OPENCLAW_EXTRA_MOUNTS.
Beispiel:
- Wenn Sie
OPENCLAW_HOME_VOLUMEändern, führen Siedocker-setup.sherneut aus, um die zusätzliche Compose-Datei neu zu generieren. - Das benannte Volume bleibt bestehen, bis es mit
docker volume rm <name>entfernt wird.
Zusätzliche apt-Pakete installieren (optional)
Wenn Sie Systempakete im Image benötigen (z. B. Build-Tools oder Media-Libraries), setzen SieOPENCLAW_DOCKER_APT_PACKAGES, bevor Sie docker-setup.sh ausführen.
Die Pakete werden während des Image-Builds installiert und bleiben auch nach dem Löschen des
Containers erhalten.
Beispiel:
- Akzeptiert eine durch Leerzeichen getrennte Liste von apt-Paketnamen.
- Wenn Sie
OPENCLAW_DOCKER_APT_PACKAGESändern, führen Siedocker-setup.sherneut aus, um das Image neu zu bauen.
Power-User / voll ausgestatteter Container (Opt-in)
Das Standard-Docker-Image ist sicherheitsorientiert und läuft als der nicht-root Benutzernode. Dies hält die Angriffsfläche klein, bedeutet aber:
- keine Systempaket-Installationen zur Laufzeit
- kein Homebrew standardmäßig
- keine gebündelten Chromium-/Playwright-Browser
- Playwright-Browser-Downloads persistent machen:
- Systemabhängigkeiten ins Image einbacken (reproduzierbar + persistent):
- Playwright-Browser ohne
npxinstallieren (vermeidet npm-Override-Konflikte):
OPENCLAW_DOCKER_APT_PACKAGES neu, anstatt --with-deps zur Laufzeit zu verwenden.
- Playwright-Browser-Downloads persistent machen:
- Setzen Sie
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightindocker-compose.yml. - Stellen Sie sicher, dass
/home/nodeüberOPENCLAW_HOME_VOLUMEpersistent ist, oder mounten Sie/home/node/.cache/ms-playwrightüberOPENCLAW_EXTRA_MOUNTS.
Berechtigungen + EACCES
Das Image läuft alsnode (uid 1000). Wenn Sie Berechtigungsfehler auf
/home/node/.openclaw sehen, stellen Sie sicher, dass Ihre Host-Bind-Mounts der uid 1000 gehören.
Beispiel (Linux-Host):
Schnellere Rebuilds (empfohlen)
Um Rebuilds zu beschleunigen, ordnen Sie Ihr Dockerfile so, dass Abhängigkeits-Layer gecacht werden. Dadurch wirdpnpm install nicht erneut ausgeführt, solange sich Lockfiles nicht ändern:
Kanal-Einrichtung (optional)
Verwenden Sie den CLI-Container, um Kanäle zu konfigurieren, und starten Sie das Gateway bei Bedarf neu. WhatsApp (QR):OpenAI Codex OAuth (Headless Docker)
Wenn Sie im Assistenten OpenAI Codex OAuth auswählen, wird eine Browser-URL geöffnet und versucht, einen Callback aufhttp://127.0.0.1:1455/auth/callback abzufangen. In Docker- oder Headless-Setups kann dieser Callback
einen Browserfehler anzeigen. Kopieren Sie die vollständige Redirect-URL, auf der Sie landen, und
fügen Sie sie wieder in den Assistenten ein, um die Authentifizierung abzuschließen.
Health-Check
E2E-Smoke-Test (Docker)
QR-Import-Smoke-Test (Docker)
Hinweise
- Gateway-Bind-Standard ist
lanfür den Container-Betrieb. - Dockerfile-CMD verwendet
--allow-unconfigured; gemountete Konfiguration mitgateway.modestattlocalstartet dennoch. Überschreiben Sie CMD, um die Schutzprüfung zu erzwingen. - Der Gateway-Container ist die Quelle der Wahrheit für Sitzungen (
~/.openclaw/agents/<agentId>/sessions/).
Agent Sandbox (Gateway auf dem Host + Docker-Werkzeuge)
Deep Dive: SandboxingWas es tut
Wennagents.defaults.sandbox aktiviert ist, führen Nicht-Hauptsitzungen Werkzeuge in einem Docker-
Container aus. Das Gateway bleibt auf Ihrem Host, die Werkzeugausführung ist jedoch isoliert:
- Scope:
"agent"standardmäßig (ein Container + Workspace pro Agent) - Scope:
"session"für Isolierung pro Sitzung - Workspace-Ordner pro Scope gemountet unter
/workspace - optionaler Zugriff auf den Agent-Workspace (
agents.defaults.sandbox.workspaceAccess) - Allow/Deny-Werkzeugrichtlinie (Deny gewinnt)
- Eingehende Medien werden in den aktiven Sandbox-Workspace (
media/inbound/*) kopiert, damit Werkzeuge sie lesen können (mitworkspaceAccess: "rw"landet dies im Agent-Workspace)
scope: "shared" deaktiviert die sitzungsübergreifende Isolierung. Alle Sitzungen teilen
sich einen Container und einen Workspace.
Pro-Agent-Sandbox-Profile (Multi-Agent)
Wenn Sie Multi-Agent-Routing verwenden, kann jeder Agent Sandbox- und Tool-Einstellungen überschreiben:agents.list[].sandbox und agents.list[].tools (plus agents.list[].tools.sandbox.tools). Damit können Sie in
einem Gateway gemischte Zugriffsstufen betreiben:
- Vollzugriff (persönlicher Agent)
- Nur-Lese-Werkzeuge + Nur-Lese-Workspace (Familien-/Arbeitsagent)
- Keine Dateisystem-/Shell-Werkzeuge (öffentlicher Agent)
Standardverhalten
- Image:
openclaw-sandbox:bookworm-slim - Ein Container pro Agent
- Agent-Workspace-Zugriff:
workspaceAccess: "none"(Standard) verwendet~/.openclaw/sandboxes"ro"behält den Sandbox-Workspace unter/workspaceund mountet den Agent-Workspace schreibgeschützt unter/agent(deaktiviertwrite/edit/apply_patch)"rw"mountet den Agent-Workspace mit Lese-/Schreibzugriff unter/workspace
- Auto-Prune: Idle > 24 h ODER Alter > 7 d
- Netzwerk:
nonestandardmäßig (explizit aktivieren, wenn Egress benötigt wird) - Standard-Allow:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - Standard-Deny:
browser,canvas,nodes,cron,discord,gateway
Sandboxing aktivieren
Wenn Sie planen, Pakete insetupCommand zu installieren, beachten Sie:
- Standard
docker.networkist"none"(kein Egress). readOnlyRoot: trueblockiert Paketinstallationen.usermuss root sein fürapt-get(lassen Sieuserweg oder setzen Sieuser: "0:0"). OpenClaw erstellt Container automatisch neu, wenn sichsetupCommand(oder die Docker- Konfiguration) ändert, es sei denn, der Container wurde kürzlich verwendet (innerhalb von ~5 Minuten). Aktive Container protokollieren eine Warnung mit dem exaktenopenclaw sandbox recreate ...-Befehl.
agents.defaults.sandbox.docker:
network, user, pidsLimit, memory, memorySwap,
cpus, ulimits, seccompProfile, apparmorProfile,
dns, extraHosts.
Multi-Agent: Überschreiben Sie agents.defaults.sandbox.{docker,browser,prune}.* pro Agent über agents.list[].sandbox.{docker,browser,prune}.*
(ignoriert, wenn agents.defaults.sandbox.scope / agents.list[].sandbox.scope "shared" ist).
Standard-Sandbox-Image bauen
openclaw-sandbox:bookworm-slim mit Dockerfile.sandbox.
Gemeinsames Sandbox-Image (optional)
Wenn Sie ein Sandbox-Image mit gängigen Build-Tools (Node, Go, Rust usw.) möchten, bauen Sie das Common-Image:openclaw-sandbox-common:bookworm-slim. Zur Verwendung:
Sandbox-Browser-Image
Um das Browser-Werkzeug innerhalb der Sandbox auszuführen, bauen Sie das Browser-Image:openclaw-sandbox-browser:bookworm-slim mit
Dockerfile.sandbox-browser. Der Container führt Chromium mit aktiviertem CDP aus und
optionalem noVNC-Observer (Headful über Xvfb).
Hinweise:
- Headful (Xvfb) reduziert Bot-Blocking gegenüber Headless.
- Headless kann weiterhin verwendet werden, indem
agents.defaults.sandbox.browser.headless=truegesetzt wird. - Keine vollständige Desktop-Umgebung (GNOME) erforderlich; Xvfb stellt das Display bereit.
- eine Sandbox-Browser-Steuer-URL (für das
browser-Werkzeug) - eine noVNC-URL (falls aktiviert und headless=false)
browser hinzu (und entfernen Sie es aus deny), sonst bleibt das Werkzeug blockiert.
Prune-Regeln (agents.defaults.sandbox.prune) gelten auch für Browser-Container.
Benutzerdefiniertes Sandbox-Image
Bauen Sie Ihr eigenes Image und verweisen Sie die Konfiguration darauf:Werkzeugrichtlinie (Allow/Deny)
denyhat Vorrang vorallow.- Wenn
allowleer ist: Alle Werkzeuge (außer deny) sind verfügbar. - Wenn
allownicht leer ist: Nur Werkzeuge inallowsind verfügbar (abzüglich deny).
Pruning-Strategie
Zwei Stellschrauben:prune.idleHours: Container entfernen, die seit X Stunden nicht verwendet wurden (0 = deaktivieren)prune.maxAgeDays: Container entfernen, die älter als X Tage sind (0 = deaktivieren)
- Aktive Sitzungen behalten, aber Lebensdauer begrenzen:
idleHours: 24,maxAgeDays: 7 - Niemals prunen:
idleHours: 0,maxAgeDays: 0
Sicherheitshinweise
- Harte Isolation gilt nur für Werkzeuge (exec/read/write/edit/apply_patch).
- Host-only-Werkzeuge wie browser/camera/canvas sind standardmäßig blockiert.
- Das Zulassen von
browserin der Sandbox durchbricht die Isolation (Browser läuft auf dem Host).
Fehlerbehebung
- Image fehlt: Bauen Sie es mit
scripts/sandbox-setup.shoder setzen Sieagents.defaults.sandbox.docker.image. - Container läuft nicht: Er wird pro Sitzung bei Bedarf automatisch erstellt.
- Berechtigungsfehler in der Sandbox: Setzen Sie
docker.userauf eine UID:GID, die dem Besitz Ihres gemounteten Workspace entspricht (oder führen Sie chown für den Workspace-Ordner aus). - Benutzerdefinierte Werkzeuge nicht gefunden: OpenClaw führt Befehle mit
sh -lc(Login-Shell) aus, die/etc/profilesourced und dabei PATH zurücksetzen kann. Setzen Siedocker.env.PATH, um Ihre benutzerdefinierten Werkzeugpfade voranzustellen (z. B./custom/bin:/usr/local/share/npm-global/bin), oder fügen Sie ein Skript unter/etc/profile.d/in Ihrem Dockerfile hinzu.