Docker VM Runtime

Pasos de runtime compartidos para instalaciones Docker basadas en VM, como GCP, Hetzner y proveedores VPS similares.

Incluir binarios necesarios en la imagen

Instalar binarios dentro de un contenedor en ejecución es una trampa. Todo lo que se instale en runtime se perderá al reiniciar.

Todos los binarios externos que necesiten los skills deben instalarse en tiempo de compilación de la imagen.

Los ejemplos a continuación muestran solo tres binarios comunes:

  • gog para acceso a Gmail
  • goplaces para Google Places
  • wacli para WhatsApp

Estos son ejemplos, no una lista completa. Puedes instalar tantos binarios como necesites usando el mismo patrón.

Si más adelante agregas skills que dependen de binarios adicionales, debes:

  1. Actualizar el Dockerfile
  2. Recompilar la imagen
  3. Reiniciar los contenedores

Dockerfile de ejemplo

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"]

Compilar y lanzar

docker compose build
docker compose up -d openclaw-gateway

Si la compilación falla con Killed o exit code 137 durante pnpm install --frozen-lockfile, la VM no tiene suficiente memoria. Usa una clase de máquina más grande antes de reintentar.

Verificar binarios:

docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli

Salida esperada:

/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli

Verificar el gateway:

docker compose logs -f openclaw-gateway

Salida esperada:

[gateway] listening on ws://0.0.0.0:18789

Qué persiste y dónde

OpenClaw se ejecuta en Docker, pero Docker no es la fuente de verdad. Todo el estado de larga duración debe sobrevivir a reinicios, recompilaciones y reboots.

ComponenteUbicaciónMecanismo de persistenciaNotas
Config del gateway/home/node/.openclaw/Volumen del hostIncluye openclaw.json, tokens
Perfiles de auth/home/node/.openclaw/Volumen del hostTokens OAuth, API keys
Configs de skills/home/node/.openclaw/skills/Volumen del hostEstado a nivel de skill
Workspace del agente/home/node/.openclaw/workspace/Volumen del hostCódigo y artefactos del agente
Sesión WhatsApp/home/node/.openclaw/Volumen del hostPreserva login QR
Keyring Gmail/home/node/.openclaw/Volumen del host + passwordRequiere GOG_KEYRING_PASSWORD
Binarios externos/usr/local/bin/Imagen DockerDeben incluirse en compilación
Runtime NodeFilesystem del contenedorImagen DockerSe recrea en cada compilación
Paquetes del SOFilesystem del contenedorImagen DockerNo instalar en runtime
Contenedor DockerEfímeroReiniciableSeguro de destruir

Actualizaciones

Para actualizar OpenClaw en la VM:

git pull
docker compose build
docker compose up -d