Docker VM Runtime

Etapas de runtime compartilhadas para instalacoes Docker baseadas em VM, como GCP, Hetzner e provedores VPS similares.

Incluir binarios necessarios na imagem

Instalar binarios dentro de um container em execucao e uma armadilha. Qualquer coisa instalada em runtime sera perdida ao reiniciar.

Todos os binarios externos necessarios por skills devem ser instalados no momento do build da imagem.

Os exemplos abaixo mostram apenas tres binarios comuns:

  • gog para acesso ao Gmail
  • goplaces para Google Places
  • wacli para WhatsApp

Estes sao exemplos, nao uma lista completa. Voce pode instalar quantos binarios forem necessarios usando o mesmo padrao.

Se voce adicionar novas skills depois que dependem de binarios adicionais, voce deve:

  1. Atualizar o Dockerfile
  2. Reconstruir a imagem
  3. Reiniciar os containers

Exemplo de Dockerfile

FROM node:24-bookworm

RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*

# Exemplo de binario 1: CLI Gmail
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

# Exemplo de binario 2: CLI Google Places
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

# Exemplo de binario 3: CLI WhatsApp
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

# Adicione mais binarios abaixo usando o mesmo padrao

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

Build e inicializacao

docker compose build
docker compose up -d openclaw-gateway

Se o build falhar com Killed ou exit code 137 durante pnpm install --frozen-lockfile, a VM esta sem memoria. Use uma classe de maquina maior antes de tentar novamente.

Verifique os binarios:

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

Saida esperada:

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

Verifique o Gateway:

docker compose logs -f openclaw-gateway

Saida esperada:

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

O que persiste e onde

O OpenClaw roda no Docker, mas o Docker nao e a fonte da verdade. Todo estado de longa duracao deve sobreviver a reinicializacoes, reconstrucoes e reboots.

ComponenteLocalizacaoMecanismo de persistenciaObservacoes
Config do gateway/home/node/.openclaw/Montagem de volume no hostInclui openclaw.json, tokens
Perfis auth modelo/home/node/.openclaw/Montagem de volume no hostTokens OAuth, chaves API
Configs de skills/home/node/.openclaw/skills/Montagem de volume no hostEstado no nivel da skill
Workspace do agente/home/node/.openclaw/workspace/Montagem de volume no hostCodigo e artefatos do agente
Sessao WhatsApp/home/node/.openclaw/Montagem de volume no hostPreserva login QR
Keyring Gmail/home/node/.openclaw/Volume no host + senhaRequer GOG_KEYRING_PASSWORD
Binarios externos/usr/local/bin/Imagem DockerDevem ser incluidos no build
Runtime NodeSistema de arquivos do containerImagem DockerReconstruido a cada build
Pacotes do SOSistema de arquivos do containerImagem DockerNao instale em runtime
Container DockerEfemeroReiniciavelSeguro para destruir

Atualizacoes

Para atualizar o OpenClaw na VM:

git pull
docker compose build
docker compose up -d