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:
gogpara acesso ao Gmailgoplacespara Google Placeswaclipara 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:
- Atualizar o Dockerfile
- Reconstruir a imagem
- 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.
| Componente | Localizacao | Mecanismo de persistencia | Observacoes |
|---|---|---|---|
| Config do gateway | /home/node/.openclaw/ | Montagem de volume no host | Inclui openclaw.json, tokens |
| Perfis auth modelo | /home/node/.openclaw/ | Montagem de volume no host | Tokens OAuth, chaves API |
| Configs de skills | /home/node/.openclaw/skills/ | Montagem de volume no host | Estado no nivel da skill |
| Workspace do agente | /home/node/.openclaw/workspace/ | Montagem de volume no host | Codigo e artefatos do agente |
| Sessao WhatsApp | /home/node/.openclaw/ | Montagem de volume no host | Preserva login QR |
| Keyring Gmail | /home/node/.openclaw/ | Volume no host + senha | Requer GOG_KEYRING_PASSWORD |
| Binarios externos | /usr/local/bin/ | Imagem Docker | Devem ser incluidos no build |
| Runtime Node | Sistema de arquivos do container | Imagem Docker | Reconstruido a cada build |
| Pacotes do SO | Sistema de arquivos do container | Imagem Docker | Nao instale em runtime |
| Container Docker | Efemero | Reiniciavel | Seguro para destruir |
Atualizacoes
Para atualizar o OpenClaw na VM:
git pull
docker compose build
docker compose up -d