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:

  • gog für Gmail-Zugriff
  • goplaces für Google Places
  • wacli fü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:

  1. Das Dockerfile aktualisieren
  2. Das Image neu bauen
  3. 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.

KomponenteOrtPersistenz-MechanismusHinweise
Gateway-Konfig/home/node/.openclaw/Host-Volume-MountInkl. openclaw.json, Tokens
Auth-Profile/home/node/.openclaw/Host-Volume-MountOAuth-Tokens, API-Keys
Skill-Konfiguration/home/node/.openclaw/skills/Host-Volume-MountSkill-Level-Status
Agenten-Workspace/home/node/.openclaw/workspace/Host-Volume-MountCode und Agenten-Artefakte
WhatsApp-Session/home/node/.openclaw/Host-Volume-MountErhält QR-Login
Gmail-Keyring/home/node/.openclaw/Host-Volume + PasswortErfordert GOG_KEYRING_PASSWORD
Externe Binaries/usr/local/bin/Docker-ImageMüssen beim Build eingebacken werden
Node-RuntimeContainer-DateisystemDocker-ImageBei jedem Image-Build neu erstellt
OS-PaketeContainer-DateisystemDocker-ImageNicht zur Laufzeit installieren
Docker-ContainerEphemerNeustartbarSicher zu löschen

Updates

Um OpenClaw auf der VM zu aktualisieren:

git pull
docker compose build
docker compose up -d