与其冒着风险在宿主机上裸跑,不如把 OpenClaw 关进 Docker 的“笼子”里。
最近 OpenClaw(原名 Moltbot/Clawdbot)在 AI 圈子里火得不行,但也因为其极高的系统权限让不少开发者心生顾虑。如果你也想安全、优雅地运行这个“全能 AI 智能体”,这篇指南值得收藏。
OpenClaw 本质上是一个拥有系统级权限的 AI 代理。直接在 Mac 或 Linux 宿主机上运行,意味着你得信任它的每一行代码。Docker 的意义在于“沙箱隔离”:它能访问的只有你挂载进去的目录,即便 AI 产生误操作,影响范围也被锁定在容器内。
首先,你需要克隆官方仓库。OpenClaw 自带了完善的 Docker 支持,甚至贴心地准备了自动化脚本。
git clone https://github.com/openclaw/openclaw
在运行安装之前,你要知道 Docker 会在你的本地创建两个核心目录并挂载到容器中:
- ~/.openclaw:存放配置、记忆、API 密钥等核心数据。
- ~/openclaw/workspace:这是 AI 的“工作台”,它读取和创建的所有文件都会在这里。
cd openclaw ./docker-setup.sh
此时,OpenClaw 会开启“查户口”模式。建议如下选择:
- Onboarding mode: 选择
manual(手动)。 - Setup type: 选择
Local gateway。 - Model provider: 推荐使用固定月费的额度,防止 API 账单爆表。
- Tailscale: 除非你非常确定需要内网穿透,否则建议先选
No,避免初始配置失败。 - Channels: 建议选No, 后续再配置。
- Skills:建议选No, 后续再配置。
一旦配置完成,你可以通过 docker ps 看到正在运行的 openclaw-gateway 容器。但真正的管理需要用到另一个名为 openclaw-cli 的容器。
docker compose ps NAME IMAGE COMMAND openclaw docker 教程 SERVICE CREATED STATUS PORTS openclaw-openclaw-gateway-1 openclaw:local "docker-entrypoint.s…" openclaw-gateway 58 minutes ago Up 16 minutes 0.0.0.0:18789-18790->18789-18790/tcp
OpenClaw 默认运行在 18789 端口。但直接访问 localhost:18789 会报错,你需要一个带 Token 的专属 URL。 获取方法:
docker compose run --rm openclaw-cli dashboard --no-open
复制终端输出的那个带 ?token=... 的链接即可进入。

然而,现实并不一定如此美好,一次就能成功。第一次进入时可能会遇到如下错误:
disconnected (1008): pairing required
按照网上的教程,你需要通过如下命令来批准客户端的访问:
docker compose exec openclaw-gateway \ node dist/index.js devices list docker compose exec openclaw-gateway \ node dist/index.js devices approve \ 6f9db1bd-a1cc-4d3f-b643-2ce
然而,你很可能会遇到如下错误:
Error: gateway closed (1006 abnormal closure (no close frame)): no close reason Error: gateway closed (1008): unauthorized: gateway token mismatch (set gateway.remote.token to match gateway.auth.token)
现在告诉你原因:
OPENCLAW_GATEWAY_TOKEN != gateway.auth.token
环境变量会自动覆盖你所设置的gateway token。
临时的解决方案为手动指定你的token,例如:
docker compose exec -T \ -e OPENCLAW_GATEWAY_TOKEN=1da6ce6f058bf6b419c9bb9bee1d39da0 \ openclaw-gateway \ node dist/index.js devices list Pending (1) ┌──────────────────────────────────────┬────────────────────────────────┬──────────┬──────────────┬──────────┬────────┐ │ Request │ Device │ Role │ IP │ Age │ Flags │ ├──────────────────────────────────────┼────────────────────────────────┼──────────┼──────────────┼──────────┼────────┤ │ b14fbe12-87c7-4d83-8ca4-1ff4da86a92d │ e6df4d58a0de153a662 │ operator │ 192.168.65.1 │ just now │ │ │ │ d443b7269e22b92174dfe9c644f28f │ │ │ │ │ │ │ 5b78 │ │ │ │ │ └──────────────────────────────────────┴────────────────────────────────┴──────────┴──────────────┴──────────┴────────┘ docker compose exec -T \ -e OPENCLAW_GATEWAY_TOKEN=1da6ce6f058bf6b419c9bb9bee1d39da0 \ openclaw-gateway \ node dist/index.js devices approve b14fbe12-87c7-4d83-8ca4-1ff4da86a92d Approved e6df4d58a0de153a662d443b7269e22b92174dfe9c644f28f5b78 (b14fbe12-87c7-4d83-8ca4-1ff4da86a92d)
同样的,如果你要查看状态也需要加上-e OPENCLAW_GATEWAY_TOKEN:
docker compose exec -T \ -e OPENCLAW_GATEWAY_TOKEN=1da6ce6f058bf6b419c9bb9bee1d39da0 \ openclaw-gateway \ node dist/index.js health docker compose exec -T \ -e OPENCLAW_GATEWAY_TOKEN=1da6ce6f058bf6b419c9bb9bee1d39da0 \ openclaw-gateway \ node dist/index.js status
当然,也有一个一劳永逸的解决方案: 变被动为主动。
在运行安装脚本前,手动生成一个固定 Token 并注入环境变量:
export OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32) && echo $OPENCLAW_GATEWAY_TOKEN
在后续的 onboarding(初始化)和 pairing(配对)过程中,统一粘贴这同一个 Token。
OpenClaw 的强大之处在于它能真正动你的文件、跑你的代码。通过 Docker 部署,我们既保留了它的“手脚”,又给它加上了“围栏”。
如果你也是那种“既想玩 AI 智能体,又怕它删库跑路”的开发者,那么这套基于 Docker Compose 的方案目前是你的最优解。
如果觉得这个分享对你部署openclaw有帮助请点赞收藏。
发布者:Ai探索者,转载请注明出处:https://javaforall.net/250568.html原文链接:https://javaforall.net
