Podman
Ejecutar OpenClaw Gateway en un contenedor rootless de Podman, gestionado por su usuario actual sin privilegios de root.
El modelo previsto es:
- Podman ejecuta el contenedor de gateway.
- Su
openclawCLI en el 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
- CLI de OpenClaw instalado en el host
- Opcional:
systemd --usersi desea un inicio automático gestionado por Quadlet - Opcional:
sudosolo si desealoginctl 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, ejecute
./scripts/podman/setup.sh.Iniciar el contenedor Gateway
Inicie el contenedor con
./scripts/run-openclaw-podman.sh launch.Ejecutar la incorporación dentro del contenedor
Ejecute
./scripts/run-openclaw-podman.sh launch setup, luego abrahttp://127.0.0.1:18789/.Gestionar el contenedor en ejecución desde la CLI del host
Establezca
OPENCLAW_CONTAINER=openclaw, luego use comandos normales deopenclawdesde el host.
Detalles de la configuración:
./scripts/podman/setup.shconstruyeopenclaw:localen su almacén rootless de Podman de forma predeterminada, o usaOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEsi establece uno.- Crea
~/.openclaw/openclaw.jsoncongateway.mode: "local"si falta. - Crea
~/.openclaw/.envconOPENCLAW_GATEWAY_TOKENsi falta. - Para lanzamientos manuales, el asistente lee solo una pequeña lista blanca de claves relacionadas con Podman desde
~/.openclaw/.envy pasa variables de entorno 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 puede establecer OPENCLAW_PODMAN_QUADLET=1.
Variables de entorno de compilación/configuración opcionales:
OPENCLAW_IMAGEoOPENCLAW_PODMAN_IMAGE— use una imagen existente/obtenida en lugar de compilaropenclaw:localOPENCLAW_DOCKER_APT_PACKAGES— instale paquetes apt adicionales durante la compilación de la imagenOPENCLAW_EXTENSIONS— preinstale las dependencias de las extensiones en el momento de la compilación
Inicio del contenedor:
./scripts/run-openclaw-podman.sh launchEl script inicia el contenedor como su uid/gid actual con --userns=keep-id y monta el estado de OpenClaw mediante bind-mount en el contenedor.
Incorporación:
./scripts/run-openclaw-podman.sh launch setupLuego abra http://127.0.0.1:18789/ y use el token de ~/.openclaw/.env.
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 --deepopenclaw doctoropenclaw channels loginEn macOS, Podman machine puede hacer que el navegador aparezca como no local para la puerta de enlace. Si la Interfaz de Control informa errores de autenticación de dispositivo después del lanzamiento, prefiera el flujo del túnel SSH en macOS Podman SSH tunnel. Para el acceso HTTPS remoto, use la guía de Tailscale en Podman + Tailscale.
Túnel SSH de Podman en macOS
Sección titulada «Túnel SSH de Podman en macOS»En macOS, Podman machine puede hacer que el navegador aparezca como no local para la puerta de enlace incluso cuando el puerto publicado está solo en 127.0.0.1.
Para el acceso del navegador local, use un túnel SSH hacia la VM de Podman y abra el puerto localhost del túnel en su lugar.
Puerto de túnel local recomendado:
28889en el host Mac- reenviado a
127.0.0.1:18789dentro de la VM de Podman
Inicie el túnel en una terminal separada:
ssh -N \ -i ~/.local/share/containers/podman/machine/machine \ -p <podman-vm-ssh-port> \ -L 28889:127.0.0.1:18789 \En ese comando, <podman-vm-ssh-port> es el puerto SSH de la VM de Podman en el host Mac. Verifique su valor actual con:
podman system connection listPermita el origen del navegador en túnel una vez. Esto es necesario la primera vez que usa el túnel porque el lanzador puede presembrar el puerto publicado por Podman, pero no puede inferir su puerto de túnel del navegador elegido:
OPENCLAW_CONTAINER=openclaw openclaw config set gateway.controlUi.allowedOrigins \ '["http://127.0.0.1:18789","http://localhost:18789","http://127.0.0.1:28889","http://localhost:28889"]' \ --strict-jsonpodman restart openclawEse es un paso único para el túnel 28889 predeterminado.
Luego abra:
http://127.0.0.1:28889/Notas:
18789generalmente ya está ocupado en el host Mac por el puerto de puerta de enlace publicado por Podman, por lo que el túnel usa28889como puerto del navegador local.- Si la interfaz de usuario solicita aprobación de emparejamiento, prefiera comandos explícitos dirigidos al contenedor o comandos de URL explícitos para que la CLI del host no recurra a archivos de emparejamiento local:
openclaw --container openclaw devices listopenclaw --container openclaw devices approve --latest- Forma equivalente de URL explícita:
openclaw devices list \ --url ws://127.0.0.1:28889 \ --token "$(sed -n 's/^OPENCLAW_GATEWAY_TOKEN=//p' ~/.openclaw/.env | head -n1)"Podman + Tailscale
Sección titulada «Podman + Tailscale»Para acceso HTTPS o navegador remoto, 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. - Para el acceso del navegador local macOS sin HTTPS, prefiera la sección de túnel SSH anterior.
Ver:
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 al arranque en hosts SSH/sin cabeza, habilite el persistencia (lingering) para su usuario actual:
sudo loginctl enable-linger "$(whoami)"Configuración, entorno y almacenamiento
Sección titulada «Configuración, entorno y almacenamiento»- Directorio de configuración:
~/.openclaw - Directorio de espacio de trabajo:
~/.openclaw/workspace - Archivo de token:
~/.openclaw/.env - Asistente de inicio:
./scripts/run-openclaw-podman.sh
El script de inicio y Quadlet montan el estado del host en el contenedor:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
De forma predeterminada, estos son directorios del host, no estado de contenedor anónimo, por lo que la configuración 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 de puerta de enlace publicado para que el tablero local funcione con el enlace no loopback 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; el valor predeterminado es127.0.0.1OPENCLAW_GATEWAY_BIND— modo de enlace de la pasarela dentro del contenedor; el valor predeterminado eslanOPENCLAW_PODMAN_USERNS—keep-id(predeterminado),auto, ohost
El lanzador 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 tanto para ./scripts/podman/setup.sh como para los comandos ./scripts/run-openclaw-podman.sh launch posteriores. El lanzador local del repositorio no persiste las anulaciones de ruta personalizadas 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. - Todavía lee
~/.openclaw/.envpara el entorno de ejecución de la pasarela, comoOPENCLAW_GATEWAY_TOKEN, pero no consume la lista de permitidos de anulación específica de Podman del lanzador manual. - Si necesita puertos de publicación personalizados, host de publicación u otros indicadores de ejecución del contenedor, use el lanzador manual o edite
~/.config/containers/systemd/openclaw.containerdirectamente, luego recargue y reinicie 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 - Salud/estado a través de la CLI del host:
openclaw gateway status --deep
Solución de problemas
Sección titulada «Solución de problemas»- Permission denied (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úrese de que las rutas de configuración/espacio de trabajo del host sean propiedad de su usuario actual. - Inicio de Gateway bloqueado (falta
gateway.mode=local): Asegúrese de que~/.openclaw/openclaw.jsonexista y establezcagateway.mode="local".scripts/podman/setup.shcrea esto si falta. - Los comandos de CLI del contenedor alcanzan el objetivo incorrecto: Use
openclaw --container <name> ...explícitamente, o exporteOPENCLAW_CONTAINER=<name>en su shell. openclaw updatefalla con--container: Es esperado. Reconstruya/pull de la imagen, luego reinicie el contenedor o el servicio Quadlet.- El servicio Quadlet no se inicia: Ejecute
systemctl --user daemon-reload, luegosystemctl --user start openclaw.service. En sistemas sin headless también puede necesitarsudo loginctl enable-linger "$(whoami)". - SELinux bloquea los montajes de enlace: Deje el comportamiento de montaje predeterminado solo; el iniciador auto-agrega
:Zen Linux cuando SELinux está aplicando o es permisivo.