agents.defaults.sandbox está habilitado, mas o sandboxing vem desativado por padrão e não exige que o próprio Gateway seja executado no Docker. Os backends de sandbox SSH e OpenShell também estão disponíveis; consulte Sandboxing.
Hospeda vários usuários? Consulte Hospedagem multilocatário para conhecer o modelo de uma célula por locatário.
Pré-requisitos
- Docker Desktop (ou Docker Engine) + Docker Compose v2
- Pelo menos 2 GB de RAM para compilar a imagem (
pnpm installpode ser encerrado por OOM em hosts com 1 GB, com código de saída 137) - Espaço em disco suficiente para imagens e logs
- Em um VPS/host público, consulte Reforço de segurança para exposição de rede, especialmente a cadeia de firewall
DOCKER-USERdo Docker
Gateway em contêiner
Compile a imagem
openclaw:local. Para usar uma imagem pré-compilada:openclaw/openclaw:ghcr.io/openclaw/openclaw ou openclaw/openclaw e evite espelhos não oficiais, que não compartilham o cronograma de lançamentos nem a política de retenção do OpenClaw. Tags oficiais: main, latest, <version> (por exemplo, 2026.2.26) e tags beta como 2026.2.26-beta.1 (versões beta nunca alteram latest/main). A imagem padrão main/latest/<version> inclui os plugins codex e diagnostics-otel. Uma variante -browser (por exemplo, latest-browser) também é distribuída com o Chromium integrado, sendo útil para a ferramenta de navegador em sandbox sem uma instalação do Playwright na primeira execução.Execute novamente em ambiente isolado da rede
--offline verifica se OPENCLAW_IMAGE já existe localmente, desabilita pulls/compilações implícitos do Compose e, em seguida, executa o fluxo normal: sincronização do .env, correções de permissões, integração inicial, sincronização da configuração do Gateway e inicialização do Compose.Se OPENCLAW_SANDBOX=1, a configuração offline também verifica as imagens de sandbox padrão configuradas e as específicas de cada agente no daemon associado a OPENCLAW_DOCKER_SOCKET, incluindo o rótulo do contrato de navegador nas imagens de navegador baseadas em Docker. Se uma imagem obrigatória estiver ausente ou desatualizada, a configuração será encerrada sem alterar a configuração do sandbox, em vez de informar um sucesso incorreto.Conclua a integração inicial
- solicita as chaves de API do provedor
- gera um token do Gateway e o grava em
.env - cria o diretório da chave secreta do perfil de autenticação
- inicia o Gateway por meio do Docker Compose
openclaw-gateway (com --no-deps --entrypoint node), pois openclaw-cli compartilha o namespace de rede do Gateway e só funciona depois que o contêiner do Gateway existe.Abra a interface de controle
http://127.0.0.1:18789/ e cole em Settings o token gravado em .env. Se você alterou o contêiner para autenticação por senha, use essa senha.Precisa da URL novamente?Fluxo manual
.git. Passe a identidade do código-fonte como argumentos de compilação,
conforme mostrado acima, para que a tela Sobre da imagem informe o commit obtido no checkout e
um carimbo de data e hora da compilação. scripts/docker/setup.sh resolve e transmite os dois valores
automaticamente.
docker compose na raiz do repositório. Se você habilitou OPENCLAW_EXTRA_MOUNTS ou OPENCLAW_HOME_VOLUME, o script de configuração grava docker-compose.extra.yml; inclua-o depois de qualquer docker-compose.override.yml mantido por você, por exemplo, -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.extra.yml.Atualização de imagens de contêiner
Quando você substitui a imagem do OpenClaw, mas mantém o mesmo estado/configuração montado, o novo Gateway executa migrações de atualização seguras para a inicialização e a convergência de plugins antes de ficar pronto. Atualizações rotineiras da imagem não devem exigir uma execução separada deopenclaw doctor --fix.
Se a inicialização não conseguir concluir esses reparos com segurança, o Gateway será encerrado em vez de
ser informado como íntegro. Com uma política de reinicialização, Docker, Podman ou Kubernetes podem mostrar
o contêiner do Gateway sendo reiniciado. Mantenha o volume de estado montado e, em seguida, execute a
mesma imagem uma vez com openclaw doctor --fix como comando do contêiner, usando as
mesmas montagens de estado/configuração utilizadas pelo Gateway:
Variáveis de ambiente
Variáveis opcionais aceitas porscripts/docker/setup.sh (e, para o contêiner do Gateway, diretamente por docker-compose.yml):
brew; forneça essas dependências por meio de uma imagem personalizada ou instale-as manualmente. Use OPENCLAW_IMAGE_APT_PACKAGES para dependências empacotadas para Debian e OPENCLAW_IMAGE_PIP_PACKAGES para dependências Python (executa python3 -m pip install --break-system-packages durante a compilação; portanto, fixe as versões e use somente índices nos quais você confia).
Se o Docker informar ResourceExhausted, cannot allocate memory ou for interrompido durante tsdown, aumente o limite de memória do compilador do Docker ou tente novamente com heaps explícitos menores:
Imagens compiladas a partir do código-fonte com plugins selecionados
OPENCLAW_EXTENSIONS seleciona ids de manifestos de plugins no checkout do código-fonte;
nomes de diretórios de origem existentes também são aceitos quando são diferentes. A
compilação do Docker resolve a seleção para diretórios de origem uma única vez, instala
dependências de produção e, quando um plugin selecionado é publicado separadamente com
openclaw.build.bundledDist: false, compila seu runtime na distribuição agrupada
raiz. Esse empacotamento exclusivo do Docker não altera o contrato do artefato npm ou
ClawHub do plugin. IDs desconhecidos, inválidos ou ambíguos fazem a compilação da imagem
falhar. IDs conhecidos somente de dependência/código-fonte mantêm seu preparo existente
de código-fonte e dependências sem ganhar uma entrada compilada na distribuição raiz.
Um plugin selecionado com entradas de compilação unificadas deve ser compilado com
sucesso; o código-fonte e a saída de runtime de plugins externos não selecionados são
removidos.
Por exemplo, estes comandos compilam imagens de Gateway autônomas, separadas e
multiarquitetura da FakeCo para ClickClack, Slack e Microsoft Teams. O ClawRouter já faz
parte do runtime raiz do OpenClaw, portanto a imagem do ClickClack seleciona somente
clickclack. O argumento de navegador explicitamente vazio mantém a imagem padrão sem
Chromium:
--platform linux/arm64 --load ou --platform linux/amd64 --load para uma
única compilação local nativa. A saída multiplataforma e o SBOM/proveniência anexados
exigem um registro ou outra saída do Buildx que preserve atestações. Após o envio,
inspecione o manifesto e implante o digest imutável em vez da tag mutável do SHA do
código-fonte:
OPENCLAW_EXTRA_MOUNTS=/path/to/fork/extensions/synology-chat:/app/extensions/synology-chat:ro. Isso substitui o pacote compilado correspondente em /app/dist/extensions/synology-chat para o mesmo id de plugin.
Observabilidade
A exportação do OpenTelemetry é feita de saída do contêiner do Gateway para seu coletor OTLP; ela não precisa de uma porta Docker publicada. Para incluir o exportador agrupado em uma imagem compilada localmente:diagnostics-otel; instale clawhub:@openclaw/diagnostics-otel por conta própria somente se você o tiver removido. Para habilitar a exportação, permita e habilite o plugin diagnostics-otel na configuração e defina diagnostics.otel.enabled=true (consulte o exemplo completo em Exportação do OpenTelemetry). Os cabeçalhos de autenticação do coletor são configurados por meio de diagnostics.otel.headers, não por variáveis de ambiente do Docker.
As métricas do Prometheus reutilizam a porta do Gateway já publicada. Instale clawhub:@openclaw/diagnostics-prometheus, habilite o plugin diagnostics-prometheus e faça a coleta em:
/metrics separada nem um caminho de proxy reverso sem autenticação. Consulte Métricas do Prometheus.
Verificações de integridade
Endpoints de sondagem do contêiner (sem exigência de autenticação):HEALTHCHECK integrado da imagem consulta /healthz; falhas repetidas marcam o contêiner como unhealthy para que os orquestradores possam reiniciá-lo ou substituí-lo.
Instantâneo detalhado e autenticado da integridade:
LAN versus loopback
Por padrão,scripts/docker/setup.sh define OPENCLAW_GATEWAY_BIND=lan para que http://127.0.0.1:18789 no host funcione com a publicação de portas do Docker.
lan(padrão): o navegador e a CLI do host podem acessar a porta publicada do Gateway.loopback: somente processos dentro do namespace de rede do contêiner podem acessar o Gateway diretamente.
gateway.bind (lan / loopback / custom / tailnet / auto), não aliases de host como 0.0.0.0 ou 127.0.0.1.Provedores locais do host
Dentro do contêiner,127.0.0.1 é o próprio contêiner, não o host. Use host.docker.internal para provedores em execução no host:
docker-compose.yml mapeia host.docker.internal para o Gateway do host no Docker Engine para Linux (o Docker Desktop fornece o mesmo alias no macOS/Windows). Os serviços do host devem escutar em um endereço que o Docker consiga acessar:
docker run? Adicione o mesmo mapeamento por conta própria, por exemplo, --add-host=host.docker.internal:host-gateway.
Backend da CLI do Claude no Docker
A imagem oficial não pré-instala o Claude Code. Instale-o e faça login dentro do usuárionode do contêiner e, em seguida, persista o diretório pessoal desse contêiner para que atualizações da imagem não apaguem o binário nem o estado de autenticação.
Para uma nova instalação, habilite um volume persistente em /home/node antes de executar a configuração:
.env — o script de configuração sempre reescreve .env usando o shell e os padrões atuais; ele não lê o arquivo por conta própria:
.env contiver valores que seu shell não consegue carregar, reexporte primeiro e manualmente aquilo de que você depende (OPENCLAW_IMAGE, portas, modo de vinculação, caminhos personalizados, OPENCLAW_EXTRA_MOUNTS, sandbox, ignorar integração inicial). A sobreposição gerada monta o volume do diretório pessoal para openclaw-gateway e openclaw-cli; execute os comandos restantes com essa sobreposição (e docker-compose.override.yml primeiro, caso você use um):
claude em /home/node/.local/bin/claude. Direcione o OpenClaw para esse caminho:
claude-cli agrupado:
OPENCLAW_HOME_VOLUME persiste a instalação nativa em /home/node/.local/bin e /home/node/.local/share/claude, além das configurações/autenticação do Claude Code em /home/node/.claude e /home/node/.claude.json. Persistir somente /home/node/.openclaw não é suficiente; se você usar OPENCLAW_EXTRA_MOUNTS em vez de um volume de diretório pessoal, monte todos esses caminhos do Claude nos dois serviços.
Bonjour / mDNS
A rede de ponte do Docker normalmente não encaminha multicast Bonjour/mDNS (224.0.0.251:5353) de forma confiável. Quando OPENCLAW_DISABLE_BONJOUR não está definido, o plugin Bonjour agrupado desabilita automaticamente a divulgação na LAN assim que detecta que está sendo executado em um contêiner, evitando entrar em um ciclo de falhas ao tentar novamente o multicast descartado pela ponte. Defina OPENCLAW_DISABLE_BONJOUR=1 para forçar a desativação independentemente da detecção ou 0 para forçar a ativação (somente em rede de host, macvlan ou outra rede na qual se saiba que o multicast mDNS funciona).
Caso contrário, use a URL publicada do Gateway, o Tailscale ou DNS-SD de longa distância para hosts Docker. Consulte Descoberta Bonjour para ver ressalvas e solução de problemas.
Armazenamento e persistência
O Docker Compose monta por vinculaçãoOPENCLAW_CONFIG_DIR em /home/node/.openclaw, OPENCLAW_WORKSPACE_DIR em /home/node/.openclaw/workspace e OPENCLAW_AUTH_PROFILE_SECRET_DIR em /home/node/.config/openclaw, para que esses caminhos sobrevivam à substituição do contêiner. Quando uma variável não está definida, docker-compose.yml usa um caminho alternativo em ${HOME}, ou /tmp se o próprio HOME estiver ausente, de modo que docker compose up nunca emita uma especificação de volume com origem vazia em ambientes básicos.
Esse diretório de configuração montado contém:
openclaw.jsonpara configuração de comportamentoagents/<agentId>/agent/auth-profiles.jsonpara autenticação OAuth/chave de API de provedores armazenada.envpara segredos de runtime provenientes do ambiente, comoOPENCLAW_GATEWAY_TOKEN
OPENCLAW_CONFIG_DIR.
Plugins baixáveis instalados armazenam o estado dos pacotes no diretório pessoal montado do OpenClaw, portanto os registros de instalação e as raízes dos pacotes sobrevivem à substituição do contêiner; a inicialização do Gateway não regenera as árvores de dependências de plugins agrupados.
Para obter detalhes completos sobre persistência de VM, consulte Runtime de VM do Docker — o que persiste onde.
Pontos críticos de crescimento do disco: media/, bancos de dados SQLite por agente, transcrições JSONL de sessões legadas, banco de dados de estado SQLite compartilhado, raízes de pacotes de plugins instalados e logs rotativos de arquivos em /tmp/openclaw/.
Auxiliares de shell (opcional)
Para comandos cotidianos mais curtos, instale o ClawDock:scripts/shell-helpers/clawdock-helpers.sh, execute novamente o comando acima para que seu auxiliar local acompanhe o local atual. Em seguida, use clawdock-start, clawdock-stop, clawdock-dashboard etc. (execute clawdock-help para ver a lista completa).
Ativar o sandbox do agente para o Gateway Docker
Ativar o sandbox do agente para o Gateway Docker
docker.sock somente depois que os pré-requisitos do sandbox são atendidos. Se a configuração do sandbox não puder ser concluída, ele redefine agents.defaults.sandbox.mode como off. O modo de código do Codex fica desativado nas interações em que o sandbox do OpenClaw está ativo (consulte Sandbox § Backend Docker); nunca monte o socket Docker do host nos contêineres de sandbox dos agentes.Automação/CI (não interativa)
Automação/CI (não interativa)
-T:Observação de segurança sobre a rede compartilhada
Observação de segurança sobre a rede compartilhada
openclaw-cli usa network_mode: "service:openclaw-gateway" para que os comandos da CLI possam acessar o Gateway por 127.0.0.1. Trate isso como um limite de confiança compartilhado. A configuração do Compose remove NET_RAW/NET_ADMIN e ativa no-new-privileges tanto no openclaw-gateway quanto no openclaw-cli.Falhas de DNS do Docker Desktop no openclaw-cli
Falhas de DNS do Docker Desktop no openclaw-cli
openclaw-cli de rede compartilhada depois que NET_RAW é removido, manifestando-se como EAI_AGAIN durante comandos baseados em npm, como openclaw plugins install. Mantenha o arquivo padrão reforçado do Compose para a operação normal. A substituição abaixo restaura os recursos padrão somente para o contêiner openclaw-cli — use-a para o comando pontual que precisa acessar o registro, não como sua invocação padrão:openclaw-cli de longa duração, recrie-o com a mesma substituição — docker compose exec/docker exec não consegue alterar os recursos do Linux em um contêiner já criado.Permissões e EACCES
Permissões e EACCES
node (uid 1000). Se você encontrar erros de permissão em /home/node/.openclaw, verifique se as montagens vinculadas do host pertencem ao uid 1000:blocked plugin candidate: suspicious ownership (... uid=1000, expected uid=0 or root), seguida por plugin present but blocked — o uid do processo e o proprietário do diretório montado do Plugin não correspondem. Prefira executar com o uid padrão 1000 e corrigir a propriedade da montagem vinculada. Altere a propriedade de /path/to/openclaw-config/npm para root:root somente se você executar intencionalmente o OpenClaw como root no longo prazo.Recompilações mais rápidas
Recompilações mais rápidas
pnpm install, a menos que os arquivos de bloqueio sejam alterados:Opções de contêiner para usuários avançados
Opções de contêiner para usuários avançados
node. Para um contêiner com mais recursos:- Persista
/home/node:export OPENCLAW_HOME_VOLUME="openclaw_home" - Inclua dependências do sistema na imagem:
export OPENCLAW_IMAGE_APT_PACKAGES="git curl jq" - Inclua dependências do Python na imagem:
export OPENCLAW_IMAGE_PIP_PACKAGES="requests==2.32.5 humanize==4.14.0" - Inclua o Chromium do Playwright na imagem:
export OPENCLAW_INSTALL_BROWSER=1ou use a tag de imagem oficial-browser - Ou instale os navegadores do Playwright em um volume persistente:
- Persista os downloads do navegador: use
OPENCLAW_HOME_VOLUMEouOPENCLAW_EXTRA_MOUNTS. O OpenClaw detecta automaticamente no Linux o Chromium gerenciado pelo Playwright presente na imagem.
OAuth do OpenAI Codex (Docker sem interface gráfica)
OAuth do OpenAI Codex (Docker sem interface gráfica)
Metadados da imagem base
Metadados da imagem base
node:24-bookworm-slim e executa tini como PID 1, para que processos zumbis sejam eliminados e sinais sejam tratados corretamente em contêineres de longa duração. Ela publica anotações OCI da imagem base, incluindo org.opencontainers.image.base.name e org.opencontainers.image.source. O Dependabot atualiza o digest fixado da imagem base do Node; as compilações de lançamento não executam uma camada separada de atualização da distribuição. Consulte Anotações de imagem OCI.Executando em um VPS?
Consulte Hetzner (VPS Docker) e Runtime de VM Docker para ver as etapas de implantação em VM compartilhada, incluindo a inclusão de binários na imagem, persistência e atualizações.Sandbox do agente
Quandoagents.defaults.sandbox está ativado com o backend Docker, o Gateway executa as ferramentas do agente (shell, leitura/gravação de arquivos etc.) dentro de contêineres Docker isolados, enquanto o próprio Gateway permanece no host — uma barreira rígida em torno de sessões de agente não confiáveis ou multilocatário, sem colocar todo o Gateway em um contêiner.
O escopo do sandbox pode ser por agente (padrão), por sessão ou compartilhado; cada escopo recebe seu próprio espaço de trabalho montado em /workspace. Você também pode configurar políticas de permissão/bloqueio de ferramentas, isolamento de rede, limites de recursos e contêineres de navegador.
Para ver a configuração completa, as imagens, as observações de segurança e os perfis de múltiplos agentes:
- Sandbox — referência completa do sandbox
- OpenShell — acesso interativo ao shell dos contêineres de sandbox
- Sandbox e ferramentas para múltiplos agentes — substituições por agente
Ativação rápida
docker build embutidos.
Solução de problemas
Imagem ausente ou contêiner de sandbox não inicia
Imagem ausente ou contêiner de sandbox não inicia
scripts/sandbox-setup.sh (checkout do código-fonte) ou com o comando docker build embutido de Sandbox § Imagens e configuração (instalação via npm), ou defina agents.defaults.sandbox.docker.image como sua imagem personalizada. Os contêineres são criados automaticamente por sessão, sob demanda.Erros de permissão no sandbox
Erros de permissão no sandbox
docker.user como um UID:GID que corresponda à propriedade do espaço de trabalho montado ou altere a propriedade da pasta do espaço de trabalho.Ferramentas personalizadas não encontradas no sandbox
Ferramentas personalizadas não encontradas no sandbox
sh -lc (shell de login), que carrega /etc/profile e pode redefinir PATH. Defina docker.env.PATH para antepor os caminhos das suas ferramentas personalizadas ou adicione um script em /etc/profile.d/ no seu Dockerfile.Processo encerrado por OOM durante a compilação da imagem (saída 137)
Processo encerrado por OOM durante a compilação da imagem (saída 137)
Não autorizado ou pareamento necessário na interface de controle
Não autorizado ou pareamento necessário na interface de controle
O destino do Gateway mostra ws://172.x.x.x ou há erros de pareamento na CLI Docker
O destino do Gateway mostra ws://172.x.x.x ou há erros de pareamento na CLI Docker
Relacionados
- Visão geral da instalação — todos os métodos de instalação
- Podman — alternativa ao Docker
- ClawDock — configuração comunitária do Docker Compose
- Atualização — como manter o OpenClaw atualizado
- Configuração — configuração do Gateway após a instalação