Docker VM Runtime
Gemeinsame Runtime-Schritte für VM-basierte Docker-Installationen wie GCP, Hetzner und ähnliche VPS-Anbieter.
Benötigte Binaries ins Image einbacken
Binaries in einem laufenden Container zu installieren ist eine Falle. Alles, was zur Laufzeit installiert wird, geht beim Neustart verloren.
Alle externen Binaries, die von Skills benötigt werden, müssen beim Image-Build installiert werden.
Die Beispiele unten zeigen nur drei gängige Binaries:
gogfür Gmail-Zugriffgoplacesfür Google Placeswaclifür WhatsApp
Das sind Beispiele, keine vollständige Liste. Du kannst beliebig viele Binaries mit demselben Muster installieren.
Wenn du später neue Skills hinzufügst, die zusätzliche Binaries brauchen, musst du:
- Das Dockerfile aktualisieren
- Das Image neu bauen
- Die Container neu starten
Beispiel-Dockerfile
FROM node:24-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Example binary 1: Gmail CLI
RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
# Example binary 2: Google Places CLI
RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
# Example binary 3: WhatsApp CLI
RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
# Add more binaries below using the same pattern
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts
RUN corepack enable
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"]
Bauen und starten
docker compose build
docker compose up -d openclaw-gateway
Falls der Build mit Killed oder exit code 137 während pnpm install --frozen-lockfile fehlschlägt, hat die VM nicht genug Speicher.
Verwende eine größere Maschinenklasse bevor du es erneut versuchst.
Binaries überprüfen:
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli
Gateway überprüfen:
docker compose logs -f openclaw-gateway
Was wo gespeichert wird
OpenClaw läuft in Docker, aber Docker ist nicht die Referenzquelle. Aller langlebiger Status muss Neustarts, Rebuilds und Reboots überleben.
| Komponente | Ort | Persistenz-Mechanismus | Hinweise |
|---|---|---|---|
| Gateway-Konfig | /home/node/.openclaw/ | Host-Volume-Mount | Inkl. openclaw.json, Tokens |
| Auth-Profile | /home/node/.openclaw/ | Host-Volume-Mount | OAuth-Tokens, API-Keys |
| Skill-Konfiguration | /home/node/.openclaw/skills/ | Host-Volume-Mount | Skill-Level-Status |
| Agenten-Workspace | /home/node/.openclaw/workspace/ | Host-Volume-Mount | Code und Agenten-Artefakte |
| WhatsApp-Session | /home/node/.openclaw/ | Host-Volume-Mount | Erhält QR-Login |
| Gmail-Keyring | /home/node/.openclaw/ | Host-Volume + Passwort | Erfordert GOG_KEYRING_PASSWORD |
| Externe Binaries | /usr/local/bin/ | Docker-Image | Müssen beim Build eingebacken werden |
| Node-Runtime | Container-Dateisystem | Docker-Image | Bei jedem Image-Build neu erstellt |
| OS-Pakete | Container-Dateisystem | Docker-Image | Nicht zur Laufzeit installieren |
| Docker-Container | Ephemer | Neustartbar | Sicher zu löschen |
Updates
Um OpenClaw auf der VM zu aktualisieren:
git pull
docker compose build
docker compose up -d