Kurz gesagt. Klone das OpenClaw-Repository und führe ./scripts/docker/setup.sh aus, mit gesetztem OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest". So nutzt das Skript das offizielle fertige Image, statt selbst eines zu bauen (ein Build aus dem Quellcode braucht mindestens 6 GB RAM). Das Skript führt das Onboarding aus, schreibt ein Gateway-Token in .env und startet das Gateway mit Docker Compose. Mounte den Zustandsordner ~/.openclaw, damit nichts verloren geht, wenn der Container ersetzt wird, und halte Port 18789 für das Internet geschlossen: Die veröffentlichten Ports von Docker umgehen UFW. Gib dem Container mindestens 2 GB Speicher. Bei einer Begrenzung auf 1 GB ohne Swap wurde das offizielle Image in unserem Test wegen Speichermangels beendet.
Geprüft am 6. November 2026, gültig für OpenClaw 2026.11.1.
Diese Anleitung stützt sich auf die Docker-Dokumentation von OpenClaw, die docker-compose.yml in seinem Repository und einen Test des offiziellen Images auf unserem eigenen Server (Zahlen unten).
Brauchst du Docker überhaupt?
Die OpenClaw-Doku nennt Docker optional: nützlich für ein isoliertes Wegwerf-Gateway oder einen Host, auf dem du kein Node.js haben willst. Auf einem VPS, der nur OpenClaw betreibt, ist die einfache npm-Installation mit einem systemd-Dienst der Hauptweg (siehe OpenClaw rund um die Uhr hosten (24/7)). Docker passt gut, wenn du ohnehin schon andere Dinge in Containern betreibst.
Was das offizielle Image ist
Wo:ghcr.io/openclaw/openclaw (primär) und der Docker-Hub-Mirror openclaw/openclaw. OpenClaw rät von inoffiziellen Mirrors ab.
Tags:latest, genaue Versionen wie 2026.11.1, -slim-Varianten und -browser-Varianten, die Chromium für die Browser-Automatisierung enthalten.
Innen: Es läuft als Benutzer node unter tini, und sein Entrypoint führt openclaw doctor --fix auf deinem gemounteten Zustand aus, bevor das Gateway startet. Image-Upgrades migrieren den Zustand also für dich. Ein eingebauter Health-Check ruft /healthz auf.
Was wir gemessen haben
Wir haben ghcr.io/openclaw/openclaw:2026.11.1 auf einem unserer Linux-Server gezogen und das Gateway zweimal mit docker run gestartet (nicht mit Compose), ohne Modell, ohne Chat-App, ohne veröffentlichten Port, begrenzt auf 1 CPU und ohne Swap: einmal mit 2 GB Speicherlimit, einmal mit 1 GB. Die Speicherwerte sind in MiB angegeben, so wie Linux sie meldet.
Ergebnis
Download
Etwa 695 MB komprimiert (amd64), 2.818 MiB (etwa 3 GB) auf der Platte nach dem Pull
Node.js im Image
24.22.1
2-GB-Limit: Start
/healthz antwortete 48 Sekunden nach docker run, inklusive des Doctor-Durchlaufs. Das Gateway lud 14 Plugins und meldete „ready“ 22 Sekunden nach seinem eigenen Start
2-GB-Limit: Speicher im Ruhezustand
1.349 MiB 30 Sekunden nachdem es den Health-Check beantwortet hatte, 1.106 MiB zwei Minuten danach, Spitzenwert 1.439 MiB. Keine Out-of-Memory-Ereignisse
1-GB-Limit
Das Gateway erreichte „ready“, dann wurde der ganze Container etwa 54 Sekunden nach dem Start wegen Speichermangels beendet (Exit-Code 137)
Die FAQ von OpenClaw nennt 1 GB als absolutes Minimum für einen VPS. Mit dieser Version in einem auf 1 GB begrenzten Container reichte das nicht. Plane mit 2 GB oder mehr, und noch mehr bei echten Gesprächen, mehreren Chat-Apps oder einem -browser-Image. Mehr dazu in Wie viel Arbeitsspeicher OpenClaw braucht.
Schritt für Schritt mit Docker Compose
Installiere Docker Engine und Docker Compose v2 und hole dir dann das Repository:
git clone https://github.com/openclaw/openclaw.git
cd openclaw
Führe das Setup-Skript mit dem fertigen Image aus:
Ohne OPENCLAW_IMAGE baut das Skript openclaw:local aus dem Quellcode, was mindestens 6 GB RAM braucht. Ein Build, der mit Killed oder Exit-Code 137 endet, hatte nicht genug Speicher. Das Skript fragt nach deinem API-Schlüssel des Anbieters, erzeugt das Gateway-Token und schreibt es in .env, dann startet es das Gateway.
Öffne das Dashboard unter http://127.0.0.1:18789/ auf demselben Rechner und füge das Token aus .env unter Settings ein. Brauchst du den Link noch einmal: docker compose run --rm openclaw-cli dashboard --no-open.
Neue DMs starten im Pairing-Modus: Schreib deinem Bot und führe dann docker compose run --rm openclaw-cli pairing approve telegram <CODE> aus. Mehr dazu in OpenClaw mit Telegram verbinden.
Für einen Host ohne Terminal-Abfragen dokumentiert OpenClaw einen Headless-Bootstrap: Trage den Schlüssel des Anbieters, OPENCLAW_GATEWAY_TOKEN und TELEGRAM_BOT_TOKEN in .env ein und führe dann onboard --non-interactive und channels add --channel telegram --use-env über den Gateway-Container aus, bevor du docker compose up -d openclaw-gateway startest.
Persistenz: was du mountest und sicherst
Im Container
Was dort liegt
Host-Seite (Standard des Setups)
/home/node/.openclaw
openclaw.json, die SQLite-Speicher (Anbieter-Zugang, Sitzungen), installierte Plugins, Geheimnisse in .env
$HOME/.openclaw
/home/node/.openclaw/workspace
Workspace und Gedächtnisdateien des Agents
$HOME/.openclaw/workspace
/home/node/.config/openclaw
Der Schlüssel für ältere verschlüsselte Zugangsdaten
$HOME/.openclaw-auth-profile-secrets
Mounte den Ordner, nie die einzelne Datei. OpenClaw speichert openclaw.json, indem es die Datei ersetzt. Ein Bind-Mount einer einzelnen Datei kann dazu führen, dass der Container eine alte Kopie liest.
Halte den Zustand auf einer lokalen Platte. NFS-, SMB- und CIFS-Freigaben bieten SQLite nicht die gemeinsame Speicherkoordination, die es braucht, und können es beschädigen.
Ein Gateway pro Zustandsordner. Stoppe den alten Container, bevor du seinen Ersatz startest.
Behandle Backups wie Geheimnisse. Laut OpenClaw-Doku liegen OAuth-Token als Klartext in diesen SQLite-Dateien.
Alles, was du in einem laufenden Container installierst, geht verloren, wenn er neu erstellt wird. Zusätzliche Werkzeuge gehören beim Build ins Image.
Den Port privat halten
Die docker-compose.yml des Repositories veröffentlicht 18789 (sowie 18790 und 3978) auf dem Host und startet das Gateway mit --bind lan, sodass der veröffentlichte Port es erreicht. Auf einem VPS heißt das: Der Dashboard-Port liegt auf der öffentlichen Adresse, solange du ihn nicht sperrst. Zwei Fallen:
UFW deckt das nicht ab. Veröffentlichte Container-Ports laufen über die eigenen Weiterleitungsketten von Docker, nicht nur über die INPUT-Regeln des Hosts. Die OpenClaw-Doku nennt Regeln für die Kette DOCKER-USER. Eine Cloud-Firewall, die nur SSH durchlässt, funktioniert ebenfalls.
Nutze einen Tunnel, um das Dashboard zu erreichen:ssh -N -L 18789:127.0.0.1:18789 root@<vps-ip>, dann öffne http://127.0.0.1:18789/ auf deinem eigenen Computer.
Compose setzt außerdem restart: unless-stopped, sodass das Gateway nach einem Absturz oder Neustart zurückkommt, und entfernt die Capabilities NET_RAW und NET_ADMIN.
Der Entrypoint des Images repariert und migriert den gemounteten Zustand beim Start. Sichere vorher ~/.openclaw. Mit latest gehst du bei jeder stabilen Version mit; pinne einen Tag wie 2026.11.1, um bei einer Version zu bleiben.
Docker überspringen: OpenClaw auf PlayNHost betreiben
Ein PlayNHost-Server ist schon ein isolierter Container mit eigenem Speicherlimit, also gibt es nichts zu komponieren. Wir nutzen nicht das offizielle Image: Der Server läuft mit Node.js 26 und installiert beim ersten Start das npm-Paket openclaw, danach prüft er bei jedem Start, ob es eine neuere Version gibt.
Einrichtung: Füge auf der Seite Agent einen API-Schlüssel eines KI-Anbieters und einen Telegram- oder Discord-Bot-Token ein und drücke dann Start. In unserem Test derselben Einrichtung lief der Agent 67 Sekunden nach dem ersten Start, Installation inklusive.
Persistenz:.openclaw liegt auf der Platte des Servers und in seinen Backups (in unserem Test etwa 4 MB). Das Programm und seine Caches werden neu installiert, nicht gesichert.
Port: Das Gateway lauscht nur auf der eigenen Loopback-Adresse des Servers, Port 18789, mit einem Token, das das Panel erzeugt. Nichts wird veröffentlicht, also kannst du bei der Firewall nichts falsch machen.
Speicher: Tarife mit 2 GB, 4 GB und 8 GB. Der Start weigert sich, OpenClaw mit weniger als 2 GB auszuführen.
Noch nicht enthalten: das Web-Dashboard, andere Chat-Apps als Telegram und Discord sowie Browser-Automatisierung (kein Chromium).
Wir verwenden Cookies, damit die Website funktioniert, um ihre Nutzung zu verstehen und unser Marketing zu messen. Du kannst alles akzeptieren, nur essenzielle Cookies akzeptieren oder pro Kategorie wählen.Wir verwenden Cookies, damit die Website funktioniert, um ihre Nutzung zu verstehen und unser Marketing zu messen. Sie sind hier standardmäßig aktiv. Du kannst alles abschalten, was du nicht möchtest.Datenschutzerklärung lesen