OpenClaw + Docker 踩坑全记录

OpenClaw + Docker 踩坑全记录

与其冒着风险在宿主机上裸跑,不如把 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 会开启“查户口”模式。建议如下选择:

  1. Onboarding mode: 选择 manual(手动)。
  2. Setup type: 选择 Local gateway
  3. Model provider: 推荐使用固定月费的额度,防止 API 账单爆表。
  4. Tailscale: 除非你非常确定需要内网穿透,否则建议先选 No,避免初始配置失败。
  5. Channels: 建议选No, 后续再配置。
  6. 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=... 的链接即可进入。

OpenClaw + Docker 踩坑全记录

然而,现实并不一定如此美好,一次就能成功。第一次进入时可能会遇到如下错误:

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

(0)
上一篇 2026年3月13日 下午6:43
下一篇 2026年3月13日 下午6:43


相关推荐

关注全栈程序员社区公众号