Podman
Execute o Gateway do OpenClaw em um contêiner Podman rootless, gerenciado pelo seu usuário atual sem privilégios de root. O modelo pretendido é:- O Podman executa o contêiner do gateway.
- Sua CLI
openclawno host é o plano de controle. - O estado persistente vive no host em
~/.openclawpor padrão. - O gerenciamento do dia a dia usa
openclaw --container <name> ...em vez desudo -u openclaw,podman execou um usuário de serviço separado.
Pré-requisitos
- Podman em modo rootless
- CLI do OpenClaw instalada no host
- Opcional:
systemd --userse você quiser inicialização automática gerenciada por Quadlet - Opcional:
sudoapenas se quiserloginctl enable-linger "$(whoami)"para persistência no boot em um host headless
Início rápido
Executar o onboarding dentro do contêiner
Execute
./scripts/run-openclaw-podman.sh launch setup e depois abra http://127.0.0.1:18789/../scripts/podman/setup.shcriaopenclaw:localno seu armazenamento rootless do Podman por padrão, ou usaOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEse você definir um deles.- Ele cria
~/.openclaw/openclaw.jsoncomgateway.mode: "local"se estiver ausente. - Ele cria
~/.openclaw/.envcomOPENCLAW_GATEWAY_TOKENse estiver ausente. - Para inicializações manuais, o helper lê apenas uma pequena allowlist de chaves relacionadas ao Podman de
~/.openclaw/.enve passa variáveis de ambiente explícitas de runtime para o contêiner; ele não entrega o arquivo env completo ao Podman.
systemd de usuário.
Você também pode definir OPENCLAW_PODMAN_QUADLET=1.
Variáveis de ambiente opcionais de build/configuração:
OPENCLAW_IMAGEouOPENCLAW_PODMAN_IMAGE— usa uma imagem existente/baixada em vez de criaropenclaw:localOPENCLAW_DOCKER_APT_PACKAGES— instala pacotes apt extras durante o build da imagemOPENCLAW_EXTENSIONS— pré-instala dependências de extensões no momento do build
--userns=keep-id e faz bind-mount do seu estado do OpenClaw no contêiner.
Onboarding:
http://127.0.0.1:18789/ e use o token de ~/.openclaw/.env.
Padrão da CLI no host:
Podman + Tailscale
Para HTTPS ou acesso remoto pelo navegador, siga a documentação principal do Tailscale. Observação específica do Podman:- Mantenha o host de publicação do Podman em
127.0.0.1. - Prefira
tailscale servegerenciado pelo host em vez deopenclaw gateway --tailscale serve. - No macOS, se o contexto de autenticação de dispositivo no navegador local não for confiável, use acesso via Tailscale em vez de soluções improvisadas de túnel local.
Systemd (Quadlet, opcional)
Se você executou./scripts/podman/setup.sh --quadlet, a configuração instala um arquivo Quadlet em:
- Iniciar:
systemctl --user start openclaw.service - Parar:
systemctl --user stop openclaw.service - Status:
systemctl --user status openclaw.service - Logs:
journalctl --user -u openclaw.service -f
Configuração, env e armazenamento
- Diretório de configuração:
~/.openclaw - Diretório do workspace:
~/.openclaw/workspace - Arquivo de token:
~/.openclaw/.env - Helper de inicialização:
./scripts/run-openclaw-podman.sh
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
openclaw.json, auth-profiles.json por agente, estado de canal/provedor,
sessões e workspace sobrevivem à substituição do contêiner.
A configuração do Podman também prepara gateway.controlUi.allowedOrigins para 127.0.0.1 e localhost na porta publicada do gateway para que o dashboard local funcione com o bind não loopback do contêiner.
Variáveis de ambiente úteis para o launcher manual:
OPENCLAW_PODMAN_CONTAINER— nome do contêiner (openclawpor padrão)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE— imagem a executarOPENCLAW_PODMAN_GATEWAY_HOST_PORT— porta do host mapeada para18789do contêinerOPENCLAW_PODMAN_BRIDGE_HOST_PORT— porta do host mapeada para18790do contêinerOPENCLAW_PODMAN_PUBLISH_HOST— interface do host para portas publicadas; o padrão é127.0.0.1OPENCLAW_GATEWAY_BIND— modo de bind do gateway dentro do contêiner; o padrão élanOPENCLAW_PODMAN_USERNS—keep-id(padrão),autoouhost
~/.openclaw/.env antes de finalizar os padrões de contêiner/imagem, então você pode persistir esses valores lá.
Se você usar um OPENCLAW_CONFIG_DIR ou OPENCLAW_WORKSPACE_DIR não padrão, defina as mesmas variáveis tanto para ./scripts/podman/setup.sh quanto para comandos posteriores ./scripts/run-openclaw-podman.sh launch. O launcher local do repositório não persiste substituições de caminho personalizadas entre shells.
Observação sobre Quadlet:
- O serviço Quadlet gerado intencionalmente mantém uma forma padrão fixa e reforçada: portas publicadas em
127.0.0.1,--bind landentro do contêiner e namespace de usuáriokeep-id. - Ele fixa
OPENCLAW_NO_RESPAWN=1,Restart=on-failureeTimeoutStartSec=300. - Ele publica tanto
127.0.0.1:18789:18789(gateway) quanto127.0.0.1:18790:18790(bridge). - Ele lê
~/.openclaw/.envcomoEnvironmentFilede runtime para valores comoOPENCLAW_GATEWAY_TOKEN, mas não consome a allowlist de substituições específicas do Podman do launcher manual. - Se você precisar de portas publicadas personalizadas, host de publicação ou outras flags de execução do contêiner, use o launcher manual ou edite
~/.config/containers/systemd/openclaw.containerdiretamente, depois recarregue e reinicie o serviço.
Comandos úteis
- Logs do contêiner:
podman logs -f openclaw - Parar contêiner:
podman stop openclaw - Remover contêiner:
podman rm -f openclaw - Abrir URL do dashboard pela CLI do host:
openclaw dashboard --no-open - Health/status pela CLI do host:
openclaw gateway status --deep(sonda RPC + varredura extra de serviço)
Solução de problemas
- Permission denied (EACCES) em config ou workspace: o contêiner roda com
--userns=keep-ide--user <your uid>:<your gid>por padrão. Garanta que os caminhos de config/workspace no host pertencem ao seu usuário atual. - Inicialização do Gateway bloqueada (faltando
gateway.mode=local): garanta que~/.openclaw/openclaw.jsonexista e definagateway.mode="local".scripts/podman/setup.shcria isso se estiver ausente. - Comandos CLI do contêiner atingem o alvo errado: use
openclaw --container <name> ...explicitamente ou exporteOPENCLAW_CONTAINER=<name>no seu shell. openclaw updatefalha com--container: esperado. Reconstrua/baixe a imagem e depois reinicie o contêiner ou o serviço Quadlet.- O serviço Quadlet não inicia: execute
systemctl --user daemon-reloade depoissystemctl --user start openclaw.service. Em sistemas headless você também pode precisar desudo loginctl enable-linger "$(whoami)". - O SELinux bloqueia bind mounts: deixe o comportamento padrão de mount como está; o launcher adiciona automaticamente
:Zno Linux quando o SELinux está em modo enforcing ou permissive.