Podman
Ejecuta OpenClaw Gateway en un contenedor Podman sin privilegios, gestionado por tu usuario actual no root. El modelo previsto es:- Podman ejecuta el contenedor del gateway.
- La CLI
openclawde tu host es el plano de control. - El estado persistente vive en el host bajo
~/.openclawde forma predeterminada. - La gestión diaria usa
openclaw --container <name> ...en lugar desudo -u openclaw,podman execo un usuario de servicio independiente.
Requisitos previos
- Podman en modo rootless
- CLI de OpenClaw instalada en el host
- Opcional:
systemd --usersi quieres arranque automático gestionado por Quadlet - Opcional:
sudosolo si quieresloginctl enable-linger "$(whoami)"para persistencia tras reinicio en un host sin interfaz
Inicio rápido
Ejecutar onboarding dentro del contenedor
Ejecuta
./scripts/run-openclaw-podman.sh launch setup, luego abre http://127.0.0.1:18789/../scripts/podman/setup.shcompilaopenclaw:localen tu almacén rootless de Podman de forma predeterminada, o usaOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEsi defines alguno.- Crea
~/.openclaw/openclaw.jsoncongateway.mode: "local"si falta. - Crea
~/.openclaw/.envconOPENCLAW_GATEWAY_TOKENsi falta. - Para inicios manuales, el helper lee solo una pequeña lista de permitidos de claves relacionadas con Podman desde
~/.openclaw/.envy pasa variables de entorno de runtime explícitas al contenedor; no entrega el archivo de entorno completo a Podman.
OPENCLAW_PODMAN_QUADLET=1.
Variables de entorno opcionales para compilación/configuración:
OPENCLAW_IMAGEoOPENCLAW_PODMAN_IMAGE— usa una imagen existente/descargada en lugar de compilaropenclaw:localOPENCLAW_DOCKER_APT_PACKAGES— instala paquetes apt adicionales durante la compilación de la imagenOPENCLAW_EXTENSIONS— preinstala dependencias de extensiones en tiempo de compilación
--userns=keep-id y monta por bind tu estado de OpenClaw dentro del contenedor.
Onboarding:
http://127.0.0.1:18789/ y usa el token de ~/.openclaw/.env.
Valor predeterminado de la CLI del host:
Podman + Tailscale
Para HTTPS o acceso remoto desde navegador, sigue la documentación principal de Tailscale. Nota específica de Podman:- Mantén el host publicado de Podman en
127.0.0.1. - Prefiere
tailscale servegestionado 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, usa acceso mediante Tailscale en lugar de soluciones improvisadas con túneles locales.
Systemd (Quadlet, opcional)
Si ejecutaste./scripts/podman/setup.sh --quadlet, la configuración instala un archivo Quadlet en:
- 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
Configuración, entorno y almacenamiento
- Directorio de configuración:
~/.openclaw - Directorio del espacio de trabajo:
~/.openclaw/workspace - Archivo de token:
~/.openclaw/.env - Helper de lanzamiento:
./scripts/run-openclaw-podman.sh
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
openclaw.json, auth-profiles.json por agente, el estado de canales/proveedores,
las sesiones y el 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 publicado del gateway para que el dashboard local funcione con el bind no loopback del contenedor.
Variables de entorno útiles para el lanzador manual:
OPENCLAW_PODMAN_CONTAINER— nombre del contenedor (openclawde forma predeterminada)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE— imagen a ejecutarOPENCLAW_PODMAN_GATEWAY_HOST_PORT— puerto del host asignado al18789del contenedorOPENCLAW_PODMAN_BRIDGE_HOST_PORT— puerto del host asignado al18790del contenedorOPENCLAW_PODMAN_PUBLISH_HOST— interfaz del host para puertos publicados; el valor predeterminado es127.0.0.1OPENCLAW_GATEWAY_BIND— modo de bind del gateway dentro del contenedor; el valor predeterminado eslanOPENCLAW_PODMAN_USERNS—keep-id(predeterminado),autoohost
~/.openclaw/.env antes de finalizar los valores predeterminados de contenedor/imagen, así que puedes persistirlos ahí.
Si usas un OPENCLAW_CONFIG_DIR o OPENCLAW_WORKSPACE_DIR no predeterminados, establece las mismas variables tanto para ./scripts/podman/setup.sh como para los comandos posteriores ./scripts/run-openclaw-podman.sh launch. El lanzador local del repositorio no persiste sobrescrituras de rutas personalizadas entre shells.
Nota sobre Quadlet:
- El servicio Quadlet generado mantiene intencionadamente una forma predeterminada fija y endurecida: puertos publicados en
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(gateway) como127.0.0.1:18790:18790(bridge). - Lee
~/.openclaw/.envcomoEnvironmentFilede runtime para valores comoOPENCLAW_GATEWAY_TOKEN, pero no consume la lista de permitidos de sobrescrituras específicas de Podman del lanzador manual. - Si necesitas puertos de publicación personalizados, host de publicación u otros flags de ejecución del contenedor, usa el lanzador manual o edita directamente
~/.config/containers/systemd/openclaw.container, luego vuelve a cargar y reinicia el servicio.
Comandos útiles
- Registros del contenedor:
podman logs -f openclaw - Detener contenedor:
podman stop openclaw - Eliminar contenedor:
podman rm -f openclaw - Abrir URL del dashboard desde la CLI del host:
openclaw dashboard --no-open - Estado/salud desde la CLI del host:
openclaw gateway status --deep(sondeo RPC + exploración adicional de servicios)
Resolució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 del Gateway bloqueado (falta
gateway.mode=local): Asegúrate de que~/.openclaw/openclaw.jsonexista y establezcagateway.mode="local".scripts/podman/setup.shlo crea si falta. - Los comandos CLI del contenedor llegan al destino equivocado: Usa
openclaw --container <name> ...explícitamente, o exportaOPENCLAW_CONTAINER=<name>en tu shell. openclaw updatefalla con--container: Es lo esperado. Vuelve a compilar/descargar la imagen y luego reinicia el contenedor o el servicio Quadlet.- El servicio Quadlet no inicia: Ejecuta
systemctl --user daemon-reload, luegosystemctl --user start openclaw.service. En sistemas sin interfaz también puede que necesitessudo loginctl enable-linger "$(whoami)". - SELinux bloquea montajes bind: Deja el comportamiento de montaje predeterminado; el lanzador añade automáticamente
:Zen Linux cuando SELinux está en modo enforcing o permissive.