Podman
Ejecuta el OpenClaw Gateway en un contenedor rootless de Podman, gestionado por tu usuario no root actual.
El modelo previsto es:
- Podman ejecuta el contenedor del gateway.
- Tu
openclawCLI del host es el plano de control. - El estado persistente reside en el host bajo
~/.openclawde forma predeterminada. - La gestión día a día utiliza
openclaw --container <name> ...en lugar desudo -u openclaw,podman execo un usuario de servicio separado.
Requisitos previos
Sección titulada «Requisitos previos»- Podman en modo rootless
- OpenClaw CLI instalado en el host
- Opcional:
systemd --usersi deseas el inicio automático gestionado por Quadlet - Opcional:
sudosolo si deseasloginctl enable-linger "$(whoami)"para la persistencia al arranque en un host headless
Inicio rápido
Sección titulada «Inicio rápido»Configuración única
Desde la raíz del repositorio, ejecuta
./scripts/podman/setup.sh.Iniciar el contenedor del Gateway
Inicia el contenedor con
./scripts/run-openclaw-podman.sh launch.Ejecutar el onboarding dentro del contenedor
Ejecuta
./scripts/run-openclaw-podman.sh launch setup, luego abrehttp://127.0.0.1:18789/.Gestionar el contenedor en ejecución desde el CLI del host
Establece
OPENCLAW_CONTAINER=openclaw, luego usa los comandos normales deopenclawdesde el host.
Detalles de la configuración:
./scripts/podman/setup.shconstruyeopenclaw:localen tu almacén rootless de Podman de forma predeterminada, o usaOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEsi estableces uno.- Crea
~/.openclaw/openclaw.jsoncongateway.mode: "local"si falta. - Crea
~/.openclaw/.envconOPENCLAW_GATEWAY_TOKENsi falta. - Para los lanzamientos manuales, el asistente lee solo una pequeña lista de permitidos (allowlist) de claves relacionadas con Podman desde
~/.openclaw/.envy pasa variables de entorno de tiempo de ejecución explícitas al contenedor; no entrega el archivo de entorno completo a Podman.
Configuración gestionada por Quadlet:
./scripts/podman/setup.sh --quadletQuadlet es una opción solo para Linux porque depende de los servicios de usuario de systemd.
También puedes establecer OPENCLAW_PODMAN_QUADLET=1.
Variables de entorno de compilación/configuración opcionales:
OPENCLAW_IMAGEoOPENCLAW_PODMAN_IMAGE— usa una imagen existente/descargada en lugar de compilaropenclaw:localOPENCLAW_IMAGE_APT_PACKAGES— instala paquetes apt adicionales durante la construcción de la imagen (también aceptaOPENCLAW_DOCKER_APT_PACKAGESheredado)OPENCLAW_IMAGE_PIP_PACKAGES— instala paquetes adicionales de Python durante la compilación de la imagen; fija las versiones y usa solo índices de paquetes que confíesOPENCLAW_EXTENSIONS— preinstala las dependencias de los complementos en tiempo de compilaciónOPENCLAW_INSTALL_BROWSER— preinstala Chromium y Xvfb para la automatización del navegador (establezca en1para habilitar)
Inicio del contenedor:
./scripts/run-openclaw-podman.sh launchEl script inicia el contenedor como tu uid/gid actual con --userns=keep-id y monta el estado de OpenClaw en el contenedor mediante bind-mount.
Incorporación:
./scripts/run-openclaw-podman.sh launch setupLuego abre http://127.0.0.1:18789/ y usa el token de ~/.openclaw/.env.
Modelo de autenticación en Podman:
- Utilice la autenticación administrada por OpenClaw durante la configuración: claves de API de Anthropic para Anthropic, o autenticación OAuth/código de dispositivo del navegador OpenAI Codex para OpenAI con respaldo de Codex.
- El lanzador de Podman no monta los directorios de credenciales del CLI del host como
~/.claudeo~/.codexen el contenedor de configuración o puerta de enlace. - Los inicios de sesión existentes del CLI del host son rutas de conveniencia del mismo host. Para las instalaciones en contenedor, mantenga la autenticación del proveedor en el estado
~/.openclawmontado que gestiona la configuración.
Predeterminado del CLI del host:
export OPENCLAW_CONTAINER=openclawLuego, comandos como estos se ejecutarán automáticamente dentro de ese contenedor:
openclaw dashboard --no-openopenclaw gateway status --deep # includes extra service scanopenclaw doctoropenclaw channels loginEn macOS, Podman machine puede hacer que el navegador parezca no local para la puerta de enlace. Si la Interfaz de Control informa errores de autenticación de dispositivo después del inicio, utilice la guía de Tailscale en Podman and Tailscale.
Podman y Tailscale
Sección titulada «Podman y Tailscale»Para acceso HTTPS o acceso remoto desde el navegador, siga la documentación principal de Tailscale.
Nota específica de Podman:
- Mantenga el host de publicación de Podman en
127.0.0.1. - Prefiera
tailscale serveadministrado por el host en lugar deopenclaw gateway --tailscale serve. - En macOS, si el contexto de autenticación de dispositivo del navegador local no es fiable, utilice el acceso de Tailscale en lugar de soluciones alternativas de túnel local ad hoc.
Véase:
Systemd (Quadlet, opcional)
Sección titulada «Systemd (Quadlet, opcional)»Si ejecutó ./scripts/podman/setup.sh --quadlet, la configuración instala un archivo Quadlet en:
~/.config/containers/systemd/openclaw.containerComandos útiles:
- Iniciar:
systemctl --user start openclaw.service - Detener:
systemctl --user stop openclaw.service - Estado:
systemctl --user status openclaw.service - Registros:
journalctl --user -u openclaw.service -f
Después de editar el archivo Quadlet:
systemctl --user daemon-reloadsystemctl --user restart openclaw.servicePara la persistencia en el arranque en hosts SSH/headless, habilite la persistencia (lingering) para su usuario actual:
sudo loginctl enable-linger "$(whoami)"Configuración, entorno y almacenamiento
Sección titulada «Configuración, entorno y almacenamiento»- Dir. de configuración:
~/.openclaw - Dir. de espacio de trabajo:
~/.openclaw/workspace - Archivo de token:
~/.openclaw/.env - Auxiliar de lanzamiento:
./scripts/run-openclaw-podman.sh
El script de lanzamiento y Quadlet montan el estado del host en el contenedor mediante bind-mount:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
Por defecto, estos son directorios del host, no estados anónimos del contenedor, por lo que openclaw.json, estado auth-profiles.json por agente, estado de canal/proveedor,
sesiones y espacio de trabajo sobreviven al reemplazo del contenedor.
La configuración de Podman también inicializa gateway.controlUi.allowedOrigins para 127.0.0.1 y localhost en el puerto de la puerta de enlace publicado, para que el panel local funcione con el enlace no local del contenedor.
Variables de entorno útiles para el iniciador manual:
OPENCLAW_PODMAN_CONTAINER— nombre del contenedor (openclawpor defecto)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE— imagen a ejecutarOPENCLAW_PODMAN_GATEWAY_HOST_PORT— puerto del host mapeado al contenedor18789OPENCLAW_PODMAN_BRIDGE_HOST_PORT— puerto del host mapeado al contenedor18790OPENCLAW_PODMAN_PUBLISH_HOST— interfaz del host para los puertos publicados; por defecto es127.0.0.1OPENCLAW_GATEWAY_BIND— modo de enlace de la puerta de enlace dentro del contenedor; por defecto eslanOPENCLAW_PODMAN_USERNS—keep-id(por defecto),autoohost
El iniciador manual lee ~/.openclaw/.env antes de finalizar los valores predeterminados del contenedor/imagen, por lo que puede persistirlos allí.
Si utiliza un OPENCLAW_CONFIG_DIR o OPENCLAW_WORKSPACE_DIR no predeterminado, establezca las mismas variables para ambos comandos ./scripts/podman/setup.sh y ./scripts/run-openclaw-podman.sh launch posteriores. El iniciador local del repositorio no persiste las anulaciones de ruta personalizada entre shells.
Nota sobre Quadlet:
- El servicio Quadlet generado mantiene intencionalmente una forma predeterminada fija y endurecida: puertos publicados
127.0.0.1,--bind landentro del contenedor y espacio de nombres de usuariokeep-id. - Fija
OPENCLAW_NO_RESPAWN=1,Restart=on-failureyTimeoutStartSec=300. - Publica tanto
127.0.0.1:18789:18789(puerta de enlace) como127.0.0.1:18790:18790(puente). - Lee
~/.openclaw/.envcomo unEnvironmentFileen tiempo de ejecución para valores comoOPENCLAW_GATEWAY_TOKEN, pero no consume la lista de permitidos de anulación específicos de Podman del lanzador manual. - Si necesitas puertos de publicación personalizados, host de publicación u otros indicadores de ejecución de contenedor, usa el lanzador manual o edita
~/.config/containers/systemd/openclaw.containerdirectamente, luego recarga y reinicia el servicio.
Comandos útiles
Sección titulada «Comandos útiles»- Registros del contenedor:
podman logs -f openclaw - Detener contenedor:
podman stop openclaw - Eliminar contenedor:
podman rm -f openclaw - Abrir URL del panel desde la CLI del host:
openclaw dashboard --no-open - Estado/salud a través de la CLI del host:
openclaw gateway status --deep(sondeo RPC + escaneo de servicio adicional)
Solución de problemas
Sección titulada «Solución de problemas»- Permiso denegado (EACCES) en configuración o espacio de trabajo: El contenedor se ejecuta con
--userns=keep-idy--user <your uid>:<your gid>de forma predeterminada. Asegúrate de que las rutas de configuración/espacio de trabajo del host sean propiedad de tu usuario actual. - Inicio de la puerta de enlace bloqueado (falta
gateway.mode=local): Asegúrate de que~/.openclaw/openclaw.jsonexista y establezcagateway.mode="local".scripts/podman/setup.shcrea esto si falta. - Los comandos de CLI del contenedor afectan al objetivo incorrecto: Usa
openclaw --container <name> ...explícitamente, o exportaOPENCLAW_CONTAINER=<name>en tu shell. openclaw updatefalla con--container: Esperado. Reconstruye/pull la imagen, luego reinicia el contenedor o el servicio Quadlet.- El servicio Quadlet no se inicia: Ejecuta
systemctl --user daemon-reload, luegosystemctl --user start openclaw.service. En sistemas sin cabeza también es posible que necesitessudo loginctl enable-linger "$(whoami)". - SELinux bloquea los montajes de enlace: Deja el comportamiento de montaje predeterminado solo; el lanzador agrega automáticamente
:Zen Linux cuando SELinux está aplicando o en modo permisivo.