Docker (opcional)
Docker é opcional. Use apenas se você quiser um gateway em contêiner ou validar o fluxo do Docker.O Docker é ideal para mim?
- Sim: você quer um ambiente de gateway isolado e descartável ou executar o OpenClaw em um host sem instalações locais.
- Não: você está executando na sua própria máquina e só quer o loop de desenvolvimento mais rápido. Use o fluxo de instalação normal.
- Nota sobre sandboxing: o sandboxing do agente também usa Docker, mas não exige que o gateway completo rode em Docker. Veja Sandboxing.
- Gateway em contêiner (OpenClaw completo em Docker)
- Sandbox de Agente por sessão (gateway no host + ferramentas do agente isoladas em Docker)
Requisitos
- Docker Desktop (ou Docker Engine) + Docker Compose v2
- Espaço em disco suficiente para imagens + logs
Gateway em contêiner (Docker Compose)
Início rápido (recomendado)
A partir da raiz do repositório:- constrói a imagem do gateway
- executa o assistente de integração
- imprime dicas opcionais de configuração de provedores
- inicia o gateway via Docker Compose
- gera um token do gateway e o grava em
.env
OPENCLAW_DOCKER_APT_PACKAGES— instala pacotes apt extras durante o buildOPENCLAW_EXTRA_MOUNTS— adiciona bind mounts extras do hostOPENCLAW_HOME_VOLUME— persiste/home/nodeem um volume nomeado
- Abra
http://127.0.0.1:18789/no seu navegador. - Cole o token na UI de Controle (Configurações → token).
- Precisa da URL novamente? Execute
docker compose run --rm openclaw-cli dashboard --no-open.
~/.openclaw/~/.openclaw/workspace
Helpers de Shell (opcional)
Para facilitar o gerenciamento diário do Docker, instale oClawDock:
clawdock-start, clawdock-stop, clawdock-dashboard, etc. Execute clawdock-help para ver todos os comandos.
Consulte o ClawDock Helper README para mais detalhes.
Fluxo manual (compose)
docker compose ... a partir da raiz do repositório. Se você ativou
OPENCLAW_EXTRA_MOUNTS ou OPENCLAW_HOME_VOLUME, o script de setup grava
docker-compose.extra.yml; inclua-o ao executar o Compose em outro local:
Token da UI de Controle + pareamento (Docker)
Se você vir “unauthorized” ou “disconnected (1008): pairing required”, obtenha um novo link do painel e aprove o dispositivo do navegador:Montagens extras (opcional)
Se você quiser montar diretórios adicionais do host nos contêineres, definaOPENCLAW_EXTRA_MOUNTS antes de executar docker-setup.sh. Isso aceita uma
lista separada por vírgulas de bind mounts do Docker e aplica a ambos
openclaw-gateway e openclaw-cli gerando docker-compose.extra.yml.
Exemplo:
- Os caminhos devem estar compartilhados com o Docker Desktop no macOS/Windows.
- Se você editar
OPENCLAW_EXTRA_MOUNTS, execute novamentedocker-setup.shpara regenerar o arquivo compose extra. docker-compose.extra.ymlé gerado. Não edite manualmente.
Persistir todo o home do contêiner (opcional)
Se você quiser que/home/node persista entre recriações do contêiner, defina um
volume nomeado via OPENCLAW_HOME_VOLUME. Isso cria um volume Docker e o monta em
/home/node, mantendo as montagens padrão de config/workspace. Use um
volume nomeado aqui (não um caminho de bind); para bind mounts, use
OPENCLAW_EXTRA_MOUNTS.
Exemplo:
- Se você alterar
OPENCLAW_HOME_VOLUME, execute novamentedocker-setup.shpara regenerar o arquivo compose extra. - O volume nomeado persiste até ser removido com
docker volume rm <name>.
Instalar pacotes apt extras (opcional)
Se você precisar de pacotes de sistema dentro da imagem (por exemplo, ferramentas de build ou bibliotecas de mídia), definaOPENCLAW_DOCKER_APT_PACKAGES antes de executar
docker-setup.sh.
Isso instala os pacotes durante o build da imagem, então eles
persistem mesmo que o contêiner seja excluído.
Exemplo:
- Aceita uma lista separada por espaços de nomes de pacotes apt.
- Se você alterar
OPENCLAW_DOCKER_APT_PACKAGES, execute novamentedocker-setup.shpara reconstruir a imagem.
Contêiner para usuários avançados / com recursos completos (opt-in)
A imagem Docker padrão é security-first e roda como o usuário não-rootnode. Isso mantém a superfície de ataque pequena, mas significa:
- sem instalações de pacotes de sistema em tempo de execução
- sem Homebrew por padrão
- sem navegadores Chromium/Playwright empacotados
- Persistir
/home/nodepara que downloads de navegadores e caches de ferramentas sobrevivam:
- Incorporar dependências de sistema na imagem (repetível + persistente):
- Instalar navegadores do Playwright sem
npx(evita conflitos de override do npm):
OPENCLAW_DOCKER_APT_PACKAGES em vez de usar --with-deps em tempo de execução.
- Persistir downloads de navegadores do Playwright:
- Defina
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightemdocker-compose.yml. - Garanta que
/home/nodepersista viaOPENCLAW_HOME_VOLUME, ou monte/home/node/.cache/ms-playwrightviaOPENCLAW_EXTRA_MOUNTS.
Permissões + EACCES
A imagem roda comonode (uid 1000). Se você vir erros de permissão em
/home/node/.openclaw, certifique-se de que seus bind mounts do host pertençam ao uid 1000.
Exemplo (host Linux):
Rebuilds mais rápidos (recomendado)
Para acelerar rebuilds, organize seu Dockerfile para que as camadas de dependências sejam cacheadas. Isso evita reexecutarpnpm install a menos que os lockfiles mudem:
Configuração de canais (opcional)
Use o contêiner da CLI para configurar canais e, se necessário, reinicie o gateway. WhatsApp (QR):OpenAI Codex OAuth (Docker headless)
Se você escolher OpenAI Codex OAuth no assistente, ele abre uma URL no navegador e tenta capturar um callback emhttp://127.0.0.1:1455/auth/callback. Em Docker ou
configurações headless, esse callback pode mostrar um erro no navegador. Copie a
URL completa de redirecionamento em que você cair e cole de volta no assistente
para finalizar a autenticação.
Health check
Teste de fumaça E2E (Docker)
Teste de fumaça de importação de QR (Docker)
Notas
- O bind do Gateway usa por padrão
lanpara uso em contêiner. - O CMD do Dockerfile usa
--allow-unconfigured; config montada comgateway.modee nãolocalainda iniciará. Substitua o CMD para impor a verificação. - O contêiner do gateway é a fonte de verdade para sessões (
~/.openclaw/agents/<agentId>/sessions/).
Sandbox de Agente (gateway no host + ferramentas em Docker)
Aprofundamento: SandboxingO que faz
Quandoagents.defaults.sandbox está habilitado, sessões não-principais executam
ferramentas dentro de um contêiner Docker. O gateway permanece no seu host, mas a
execução das ferramentas é isolada:
- escopo:
"agent"por padrão (um contêiner + workspace por agente) - escopo:
"session"para isolamento por sessão - pasta de workspace por escopo montada em
/workspace - acesso opcional ao workspace do agente (
agents.defaults.sandbox.workspaceAccess) - política de ferramentas allow/deny (deny vence)
- mídia de entrada é copiada para o workspace ativo do sandbox (
media/inbound/*) para que as ferramentas possam lê-la (comworkspaceAccess: "rw", isso vai para o workspace do agente)
scope: "shared" desativa o isolamento entre sessões. Todas as sessões
compartilham um contêiner e um workspace.
Perfis de sandbox por agente (multi-agente)
Se você usa roteamento multi-agente, cada agente pode sobrescrever configurações de sandbox + ferramentas:agents.list[].sandbox e agents.list[].tools (além de
agents.list[].tools.sandbox.tools). Isso permite executar níveis de acesso mistos em um único gateway:
- Acesso total (agente pessoal)
- Ferramentas somente leitura + workspace somente leitura (agente familiar/de trabalho)
- Sem ferramentas de filesystem/shell (agente público)
Comportamento padrão
- Imagem:
openclaw-sandbox:bookworm-slim - Um contêiner por agente
- Acesso ao workspace do agente:
workspaceAccess: "none"(padrão) usa~/.openclaw/sandboxes"ro"mantém o workspace do sandbox em/workspacee monta o workspace do agente como somente leitura em/agent(desativawrite/edit/apply_patch)"rw"monta o workspace do agente com leitura/escrita em/workspace
- Auto-prune: inativo > 24h OU idade > 7d
- Rede:
nonepor padrão (faça opt-in explícito se precisar de egress) - Allow padrão:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - Deny padrão:
browser,canvas,nodes,cron,discord,gateway
Habilitar sandboxing
Se você planeja instalar pacotes emsetupCommand, observe:
- O
docker.networkpadrão é"none"(sem egress). readOnlyRoot: truebloqueia instalações de pacotes.userdeve ser root paraapt-get(omitauserou definauser: "0:0"). O OpenClaw recria automaticamente os contêineres quandosetupCommand(ou a configuração do Docker) muda, a menos que o contêiner tenha sido usado recentemente (dentro de ~5 minutos). Contêineres “quentes” registram um aviso com o comando exatoopenclaw sandbox recreate ....
agents.defaults.sandbox.docker:
network, user, pidsLimit, memory,
memorySwap, cpus, ulimits, seccompProfile,
apparmorProfile, dns, extraHosts.
Multi-agente: sobrescreva agents.defaults.sandbox.{docker,browser,prune}.* por agente via agents.list[].sandbox.{docker,browser,prune}.*
(ignorado quando agents.defaults.sandbox.scope / agents.list[].sandbox.scope é "shared").
Construir a imagem padrão do sandbox
openclaw-sandbox:bookworm-slim usando Dockerfile.sandbox.
Imagem comum de sandbox (opcional)
Se você quiser uma imagem de sandbox com ferramentas comuns de build (Node, Go, Rust, etc.), construa a imagem comum:openclaw-sandbox-common:bookworm-slim. Para usá-la:
Imagem de navegador do sandbox
Para executar a ferramenta de navegador dentro do sandbox, construa a imagem de navegador:openclaw-sandbox-browser:bookworm-slim usando
Dockerfile.sandbox-browser. O contêiner executa o Chromium com CDP habilitado e
um observador noVNC opcional (headful via Xvfb).
Notas:
- Headful (Xvfb) reduz bloqueios de bots vs headless.
- Headless ainda pode ser usado definindo
agents.defaults.sandbox.browser.headless=true. - Nenhum ambiente de desktop completo (GNOME) é necessário; o Xvfb fornece o display.
- uma URL de controle do navegador do sandbox (para a ferramenta
browser) - uma URL noVNC (se habilitado e headless=false)
browser (e remova de deny) ou a ferramenta continuará bloqueada.
As regras de prune (agents.defaults.sandbox.prune) também se aplicam a contêineres de navegador.
Imagem de sandbox personalizada
Construa sua própria imagem e aponte a configuração para ela:Política de ferramentas (allow/deny)
denyvence sobreallow.- Se
allowestiver vazio: todas as ferramentas (exceto deny) estão disponíveis. - Se
allownão estiver vazio: apenas as ferramentas emallowestão disponíveis (menos deny).
Estratégia de pruning
Dois controles:prune.idleHours: remover contêineres não usados em X horas (0 = desativar)prune.maxAgeDays: remover contêineres mais antigos que X dias (0 = desativar)
- Manter sessões ativas, mas limitar a vida útil:
idleHours: 24,maxAgeDays: 7 - Nunca fazer prune:
idleHours: 0,maxAgeDays: 0
Notas de segurança
- A barreira rígida se aplica apenas a ferramentas (exec/read/write/edit/apply_patch).
- Ferramentas somente do host como browser/camera/canvas são bloqueadas por padrão.
- Permitir
browserno sandbox quebra o isolamento (o navegador roda no host).
Solução de problemas
- Imagem ausente: construa com
scripts/sandbox-setup.shou definaagents.defaults.sandbox.docker.image. - Contêiner não está em execução: ele será criado automaticamente por sessão sob demanda.
- Erros de permissão no sandbox: defina
docker.userpara um UID:GID que corresponda à propriedade do seu workspace montado (ou faça chown da pasta do workspace). - Ferramentas personalizadas não encontradas: o OpenClaw executa comandos com
sh -lc(login shell), que carrega/etc/profilee pode redefinir o PATH. Definadocker.env.PATHpara prefixar os caminhos das suas ferramentas personalizadas (por exemplo,/custom/bin:/usr/local/share/npm-global/bin), ou adicione um script em/etc/profile.d/no seu Dockerfile.