Skip to Content
👋 Willkommen bei HowToUseOpenClaw Schnellstart

Docker (optional)

Docker ist optional. Nutze es nur, wenn du ein containerisiertes Gateway möchtest oder den Docker-Ablauf prüfen willst.

Passt Docker zu dir?

  • Ja: Du willst eine isolierte, wegwerfbare Gateway-Umgebung oder OpenClaw auf einem Host ohne lokale Installationen.
  • Nein: Du läufst auf deiner eigenen Maschine und willst nur den schnellsten Dev-Loop. Nutze stattdessen die normale Installation.
  • Hinweis Sandboxing: Agent-Sandboxing nutzt ebenfalls Docker, erfordert aber nicht, dass das gesamte Gateway in Docker läuft. Siehe Sandboxing.

Diese Seite behandelt:

  • Containerisiertes Gateway — Vollständiges OpenClaw (CLI + Gateway) in Docker.
  • Agent-Sandbox — Gateway auf dem Host, Tools laufen in Docker-Containern (einer pro Agent/Session).

Sandbox im Detail: Sandboxing

Voraussetzungen

  • Docker Desktop (oder Docker Engine) + Docker Compose v2
  • Ausreichend Speicher für Images + Logs

Containerisiertes Gateway (Docker Compose)

Schnellstart (empfohlen)

Aus dem Repo-Root:

./docker-setup.sh

Dieses Skript:

  • baut das Gateway-Image
  • startet den Onboarding-Wizard
  • gibt optionale Hinweise zur Provider-Einrichtung aus
  • startet das Gateway per Docker Compose
  • erzeugt ein Gateway-Token und schreibt es in .env

Optionale Umgebungsvariablen:

  • CLAWDBOT_DOCKER_APT_PACKAGES — zusätzliche apt-Pakete beim Build installieren
  • CLAWDBOT_EXTRA_MOUNTS — zusätzliche Host-Bind-Mounts
  • CLAWDBOT_HOME_VOLUME/home/node in einem benannten Volume persistieren

Nach dem Durchlauf:

  • Öffne http://127.0.0.1:18789/ im Browser.
  • Token in die Control UI einfügen (Einstellungen → Token).

Es schreibt Config/Workspace auf dem Host:

  • ~/.clawdbot/
  • ~/clawd

Läuft auf einem VPS? Siehe Hetzner (Docker VPS).

Manueller Ablauf (Compose)

docker build -t openclaw:local -f Dockerfile . docker compose run --rm openclaw-cli onboard docker compose up -d openclaw-gateway

Zusätzliche Mounts (optional)

Wenn du weitere Host-Verzeichnisse in die Container mounten willst, setze vor dem Ausführen von docker-setup.sh die Variable CLAWDBOT_EXTRA_MOUNTS. Sie akzeptiert eine kommagetrennte Liste von Docker-Bind-Mounts und wendet sie auf openclaw-gateway und openclaw-cli an, indem docker-compose.extra.yml erzeugt wird. Beispiel:

export CLAWDBOT_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw" ./docker-setup.sh

Hinweise:

  • Pfade müssen unter Docker Desktop auf macOS/Windows freigegeben sein.
  • Wenn du CLAWDBOT_EXTRA_MOUNTS änderst, führe docker-setup.sh erneut aus, damit die extra Compose-Datei neu erzeugt wird.
  • docker-compose.extra.yml wird generiert. Nicht von Hand bearbeiten.

Gesamtes Container-Home persistieren (optional)

Wenn /home/node über Container-Neuerstellungen hinweg bestehen soll, setze ein benanntes Volume über CLAWDBOT_HOME_VOLUME. Das erzeugt ein Docker-Volume und mountet es unter /home/node, während die üblichen Config/Workspace-Bind-Mounts erhalten bleiben. Hier ein benanntes Volume verwenden (kein Bind-Pfad); für Bind-Mounts siehe CLAWDBOT_EXTRA_MOUNTS. Beispiel:

export CLAWDBOT_HOME_VOLUME="openclaw_home" ./docker-setup.sh

Kombinierbar mit Extra-Mounts:

export CLAWDBOT_HOME_VOLUME="openclaw_home" export CLAWDBOT_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw" ./docker-setup.sh

Hinweise:

  • Bei Änderung von CLAWDBOT_HOME_VOLUME docker-setup.sh erneut ausführen, damit die extra Compose-Datei neu erzeugt wird.
  • Das benannte Volume bleibt bestehen, bis es mit docker volume rm <name> entfernt wird.

Zusätzliche apt-Pakete installieren (optional)

Wenn du Systempakete im Image brauchst (z. B. Build-Tools oder Media-Bibliotheken), setze vor docker-setup.sh die Variable CLAWDBOT_DOCKER_APT_PACKAGES. Die Pakete werden beim Image-Build installiert und bleiben auch nach Löschen des Containers. Beispiel:

export CLAWDBOT_DOCKER_APT_PACKAGES="ffmpeg build-essential" ./docker-setup.sh

Hinweise:

  • Akzeptiert eine leerzeichengetrennte Liste von apt-Paketnamen.
  • Bei Änderung von CLAWDBOT_DOCKER_APT_PACKAGES docker-setup.sh erneut ausführen, um das Image neu zu bauen.

Schnellere Rebuilds (empfohlen)

Damit Rebuilds schneller gehen, die Dockerfile so anordnen, dass Abhängigkeits-Layer gecacht werden. So wird pnpm install nur bei geänderten Lockfiles erneut ausgeführt:

FROM node:22-bookworm # Install Bun (required for build scripts) RUN curl -fsSL https://bun.sh/install | bash ENV PATH="/root/.bun/bin:${PATH}" RUN corepack enable WORKDIR /app # Cache dependencies unless package metadata changes COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ COPY ui/package.json ./ui/package.json COPY scripts ./scripts RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build RUN pnpm ui:install RUN pnpm ui:build ENV NODE_ENV=production CMD ["node","dist/index.js"]

Kanal-Einrichtung (optional)

CLI-Container nutzen, um Kanäle zu konfigurieren, dann bei Bedarf das Gateway neu starten. WhatsApp (QR):

docker compose run --rm openclaw-cli channels login

Telegram (Bot-Token):

docker compose run --rm openclaw-cli channels add --channel telegram --token "<token>"

Discord (Bot-Token):

docker compose run --rm openclaw-cli channels add --channel discord --token "<token>"

Doku: WhatsApp, Telegram, Discord

Health-Check

docker compose exec openclaw-gateway node dist/index.js health --token "$CLAWDBOT_GATEWAY_TOKEN"

E2E-Smoke-Test (Docker)

scripts/e2e/onboard-docker.sh

QR-Import-Smoke-Test (Docker)

pnpm test:docker:qr

Hinweise

  • Gateway-Bind standardmäßig lan für Container-Nutzung.
  • Der Gateway-Container ist die Quelle für Sessions (~/.clawdbot/agents/<agentId>/sessions/).

Agent-Sandbox (Host-Gateway + Docker-Tools)

Im Detail: Sandboxing

Was es macht

Wenn agents.defaults.sandbox aktiviert ist, laufen nicht-main-Sessions mit Tools in einem Docker-Container. Das Gateway bleibt auf dem Host, die Tool-Ausführung ist isoliert:

  • scope: "agent" (Standard) — ein Container + Workspace pro Agent
  • scope: "session" — Isolierung pro Session
  • pro Scope Workspace-Ordner unter /workspace gemountet
  • optionaler Agent-Workspace-Zugriff (agents.defaults.sandbox.workspaceAccess)
  • Tool-Policy allow/deny (deny gewinnt)
  • eingehende Medien werden in den aktiven Sandbox-Workspace kopiert (media/inbound/*), damit Tools sie lesen können (bei workspaceAccess: "rw" landen sie im Agent-Workspace)

Warnung: scope: "shared" schaltet die Isolierung zwischen Sessions aus. Alle Sessions teilen sich einen Container und einen Workspace.

Sandbox-Profile pro Agent (Multi-Agent)

Bei Multi-Agent-Routing kann jeder Agent Sandbox- und Tool-Einstellungen überschreiben: agents.list[].sandbox und agents.list[].tools (plus agents.list[].tools.sandbox.tools). So kannst du unterschiedliche Zugriffsstufen in einem Gateway betreiben:

  • Voller Zugriff (persönlicher Agent)
  • Nur-Lesen-Tools + nur-Lesen-Workspace (Familie/Arbeit)
  • Keine Dateisystem-/Shell-Tools (öffentlicher Agent)

Siehe Multi-Agent Sandbox & Tools für Beispiele, Vorrang und Fehlerbehebung.

Standardverhalten

  • Image: openclaw-sandbox:bookworm-slim
  • Ein Container pro Agent
  • Agent-Workspace-Zugriff: workspaceAccess: "none" (Standard) nutzt ~/.clawdbot/sandboxes
    • "ro": Sandbox-Workspace unter /workspace, Agent-Workspace nur lesen unter /agent (deaktiviert write/edit/apply_patch)
    • "rw": Agent-Workspace lesen/schreiben unter /workspace
  • Auto-Prune: inaktiv > 24 h ODER älter als 7 Tage
  • Netzwerk: standardmäßig none (bei Bedarf explizit egress aktivieren)
  • 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 du Pakete in setupCommand installieren willst, beachte:

  • Standard docker.network ist "none" (kein Egress).
  • readOnlyRoot: true verhindert Paketinstallationen.
  • user muss root sein für apt-get (user weglassen oder user: "0:0" setzen). OpenClaw erstellt Container neu, wenn sich setupCommand (oder Docker-Config) ändert, außer der Container wurde kürzlich genutzt (innerhalb von ca. 5 Minuten). Aktive Container loggen eine Warnung mit dem genauen Befehl openclaw sandbox recreate ....
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared (agent is default) workspaceAccess: "none", // none | ro | rw workspaceRoot: "~/.clawdbot/sandboxes", docker: { image: "openclaw-sandbox:bookworm-slim", workdir: "/workspace", readOnlyRoot: true, tmpfs: ["/tmp", "/var/tmp", "/run"], network: "none", user: "1000:1000", capDrop: ["ALL"], env: { LANG: "C.UTF-8" }, setupCommand: "apt-get update && apt-get install -y git curl jq", pidsLimit: 256, memory: "1g", memorySwap: "2g", cpus: 1, ulimits: { nofile: { soft: 1024, hard: 2048 }, nproc: 256 }, seccompProfile: "/path/to/seccomp.json", apparmorProfile: "openclaw-sandbox", dns: ["1.1.1.1", "8.8.8.8"], extraHosts: ["internal.service:10.0.0.5"] }, prune: { idleHours: 24, // 0 disables idle pruning maxAgeDays: 7 // 0 disables max-age pruning } } } }, tools: { sandbox: { tools: { allow: ["exec", "process", "read", "write", "edit", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status"], deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"] } } } }

Hardening-Optionen liegen unter agents.defaults.sandbox.docker: network, user, pidsLimit, memory, memorySwap, cpus, ulimits, seccompProfile, apparmorProfile, dns, extraHosts. Multi-Agent: pro Agent überschreiben via agents.list[].sandbox.{docker,browser,prune}.* (ignoriert, wenn agents.defaults.sandbox.scope / agents.list[].sandbox.scope auf "shared" steht).

Standard-Sandbox-Image bauen

scripts/sandbox-setup.sh

Das baut openclaw-sandbox:bookworm-slim mit Dockerfile.sandbox.

Sandbox-Common-Image (optional)

Wenn du ein Sandbox-Image mit gängigen Build-Tools (Node, Go, Rust usw.) willst, baue das Common-Image:

scripts/sandbox-common-setup.sh

Das baut openclaw-sandbox-common:bookworm-slim. Nutzung:

{ agents: { defaults: { sandbox: { docker: { image: "openclaw-sandbox-common:bookworm-slim" } } } } }

Sandbox-Browser-Image

Damit das Browser-Tool in der Sandbox läuft, das Browser-Image bauen:

scripts/sandbox-browser-setup.sh

Das baut openclaw-sandbox-browser:bookworm-slim mit Dockerfile.sandbox-browser. Der Container läuft mit Chromium und CDP sowie optional noVNC-Observer (headful via Xvfb). Hinweise:

  • Headful (Xvfb) reduziert Bot-Blocking gegenüber headless.
  • Headless bleibt nutzbar über agents.defaults.sandbox.browser.headless=true.
  • Kein vollständiges Desktop-Environment (GNOME) nötig; Xvfb liefert die Anzeige.

Config:

{ agents: { defaults: { sandbox: { browser: { enabled: true } } } } }

Eigenes Browser-Image:

{ agents: { defaults: { sandbox: { browser: { image: "my-openclaw-browser" } } } } }

Wenn aktiviert, erhält der Agent:

  • eine Sandbox-Browser-Steuerungs-URL (für das browser-Tool)
  • eine noVNC-URL (falls aktiviert und headless=false)

Denk dran: Bei einer Allowlist für Tools browser hinzufügen (und aus deny entfernen), sonst bleibt das Tool blockiert. Prune-Regeln (agents.defaults.sandbox.prune) gelten auch für Browser-Container.

Eigenes Sandbox-Image

Eigenes Image bauen und in der Config referenzieren:

docker build -t my-openclaw-sbx -f Dockerfile.sandbox .
{ agents: { defaults: { sandbox: { docker: { image: "my-openclaw-sbx" } } } } }

Tool-Policy (allow/deny)

  • deny gewinnt gegenüber allow.
  • Wenn allow leer ist: alle Tools (außer deny) verfügbar.
  • Wenn allow nicht leer ist: nur die in allow genannten Tools (minus deny).

Pruning-Strategie

Zwei Stellschrauben:

  • prune.idleHours: Container entfernen, die seit X Stunden ungenutzt sind (0 = deaktiviert)
  • prune.maxAgeDays: Container älter als X Tage entfernen (0 = deaktiviert)

Beispiel:

  • Aktive Sessions behalten, Lebensdauer begrenzen: idleHours: 24, maxAgeDays: 7
  • Nie prunen: idleHours: 0, maxAgeDays: 0

Sicherheitshinweise

  • Die harte Grenze gilt nur für Tools (exec/read/write/edit/apply_patch).
  • Host-only-Tools wie browser/camera/canvas sind standardmäßig blockiert.
  • browser in der Sandbox zu erlauben bricht die Isolierung (Browser läuft auf dem Host).

Fehlerbehebung

  • Image fehlt: bauen mit scripts/sandbox-setup.sh oder agents.defaults.sandbox.docker.image setzen.
  • Container läuft nicht: wird pro Session bei Bedarf automatisch erstellt.
  • Berechtigungsfehler in der Sandbox: docker.user auf UID:GID setzen, die zum gemounteten Workspace passt (oder Workspace-Ordner chown).
  • Eigene Tools nicht gefunden: OpenClaw führt Befehle mit sh -lc (Login-Shell) aus, die /etc/profile lädt und PATH zurücksetzen kann. docker.env.PATH setzen, um eigene Tool-Pfade voranzustellen (z. B. /custom/bin:/usr/local/share/npm-global/bin), oder ein Skript unter /etc/profile.d/ im Dockerfile hinzufügen.

Nix · Deploy on Railway

Zuletzt aktualisiert am: