在 rootless Podman 容器中运行 OpenClaw Gateway 网关,并由你当前的非 root 用户管理。 预期模型是:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Podman 运行 Gateway 网关容器。
- 你的主机
openclawCLI 是控制平面。 - 默认情况下,持久状态位于主机的
~/.openclaw下。 - 日常管理使用
openclaw --container <name> ...,而不是sudo -u openclaw、podman exec或单独的服务用户。
前提条件
- Podman,以 rootless 模式运行
- 主机上已安装 OpenClaw CLI
- 可选: 如果你希望使用 Quadlet 管理自动启动,则需要
systemd --user - 可选: 仅当你希望在无头主机上通过
loginctl enable-linger "$(whoami)"实现开机持久运行时,才需要sudo
快速开始
设置详情:
./scripts/podman/setup.sh默认会在你的 rootless Podman 存储中构建openclaw:local,如果你设置了OPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGE,则使用该镜像。- 如果缺失,它会创建带有
gateway.mode: "local"的~/.openclaw/openclaw.json。 - 如果缺失,它会创建带有
OPENCLAW_GATEWAY_TOKEN的~/.openclaw/.env。 - 对于手动启动,该辅助脚本只会从
~/.openclaw/.env读取一小组与 Podman 相关的允许键,并向容器传递明确的运行时环境变量;它不会把完整的环境文件交给 Podman。
OPENCLAW_PODMAN_QUADLET=1。
可选的构建/设置环境变量:
OPENCLAW_IMAGE或OPENCLAW_PODMAN_IMAGE— 使用已有/已拉取的镜像,而不是构建openclaw:localOPENCLAW_DOCKER_APT_PACKAGES— 在镜像构建期间安装额外的 apt 软件包OPENCLAW_EXTENSIONS— 在构建时预安装插件依赖OPENCLAW_INSTALL_BROWSER— 为浏览器自动化预安装 Chromium 和 Xvfb(设置为1以启用)
--userns=keep-id 启动容器,并将你的 OpenClaw 状态绑定挂载到容器中。
新手引导:
http://127.0.0.1:18789/,并使用 ~/.openclaw/.env 中的令牌。
主机 CLI 默认值:
Podman + Tailscale
对于 HTTPS 或远程浏览器访问,请遵循主 Tailscale 文档。 Podman 特定说明:- 将 Podman 发布主机保持为
127.0.0.1。 - 优先使用由主机管理的
tailscale serve,而不是openclaw gateway --tailscale serve。 - 在 macOS 上,如果本地浏览器设备认证上下文不可靠,请使用 Tailscale 访问,而不是临时的本地隧道变通方法。
Systemd(Quadlet,可选)
如果你运行了./scripts/podman/setup.sh --quadlet,设置会在以下位置安装 Quadlet 文件:
- 启动:
systemctl --user start openclaw.service - 停止:
systemctl --user stop openclaw.service - Status:
systemctl --user status openclaw.service - 日志:
journalctl --user -u openclaw.service -f
配置、环境变量和存储
- 配置目录:
~/.openclaw - 工作区目录:
~/.openclaw/workspace - 令牌文件:
~/.openclaw/.env - 启动辅助脚本:
./scripts/run-openclaw-podman.sh
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
openclaw.json、每个智能体的 auth-profiles.json、渠道/提供商状态、
会话和工作区都会在容器替换后保留下来。
Podman 设置还会为已发布的 Gateway 网关端口上的 127.0.0.1 和 localhost 填充 gateway.controlUi.allowedOrigins,使本地仪表板能够配合容器的非 loopback 绑定正常工作。
手动启动器的常用环境变量:
OPENCLAW_PODMAN_CONTAINER— 容器名称(默认为openclaw)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE— 要运行的镜像OPENCLAW_PODMAN_GATEWAY_HOST_PORT— 映射到容器18789的主机端口OPENCLAW_PODMAN_BRIDGE_HOST_PORT— 映射到容器18790的主机端口OPENCLAW_PODMAN_PUBLISH_HOST— 发布端口的主机接口;默认是127.0.0.1OPENCLAW_GATEWAY_BIND— 容器内的 Gateway 网关绑定模式;默认是lanOPENCLAW_PODMAN_USERNS—keep-id(默认)、auto或host
~/.openclaw/.env,因此你可以在那里持久保存这些设置。
如果你使用非默认的 OPENCLAW_CONFIG_DIR 或 OPENCLAW_WORKSPACE_DIR,请为 ./scripts/podman/setup.sh 和之后的 ./scripts/run-openclaw-podman.sh launch 命令设置相同变量。仓库本地启动器不会在不同 shell 之间持久保存自定义路径覆盖。
Quadlet 说明:
- 生成的 Quadlet 服务会有意保持固定、加固的默认形态:
127.0.0.1发布端口、容器内--bind lan,以及keep-id用户命名空间。 - 它固定设置
OPENCLAW_NO_RESPAWN=1、Restart=on-failure和TimeoutStartSec=300。 - 它同时发布
127.0.0.1:18789:18789(Gateway 网关)和127.0.0.1:18790:18790(bridge)。 - 它会将
~/.openclaw/.env作为运行时EnvironmentFile读取,用于OPENCLAW_GATEWAY_TOKEN等值,但不会使用手动启动器的 Podman 特定覆盖允许列表。 - 如果你需要自定义发布端口、发布主机或其他容器运行标志,请使用手动启动器,或直接编辑
~/.config/containers/systemd/openclaw.container,然后重新加载并重启服务。
常用命令
- 容器日志:
podman logs -f openclaw - 停止容器:
podman stop openclaw - 移除容器:
podman rm -f openclaw - 从主机 CLI 打开仪表板 URL:
openclaw dashboard --no-open - 通过主机 CLI 查看健康/状态:
openclaw gateway status --deep(RPC 探测 + 额外的 服务扫描)
故障排除
- 配置或工作区上权限被拒绝(EACCES): 默认情况下,容器使用
--userns=keep-id和--user <your uid>:<your gid>运行。确保主机配置/工作区路径归你当前用户所有。 - Gateway 网关启动被阻止(缺少
gateway.mode=local): 确保~/.openclaw/openclaw.json存在,并设置了gateway.mode="local"。如果缺失,scripts/podman/setup.sh会创建它。 - 容器 CLI 命令命中了错误目标: 显式使用
openclaw --container <name> ...,或在你的 shell 中导出OPENCLAW_CONTAINER=<name>。 openclaw update与--container一起使用时失败: 这是预期行为。重新构建/拉取镜像,然后重启容器或 Quadlet 服务。- Quadlet 服务未启动: 运行
systemctl --user daemon-reload,然后运行systemctl --user start openclaw.service。在无头系统上,你可能还需要运行sudo loginctl enable-linger "$(whoami)"。 - SELinux 阻止绑定挂载: 保持默认挂载行为不变;当 Linux 上 SELinux 处于 enforcing 或 permissive 模式时,启动器会自动添加
:Z。