跳转到内容
灵墨笔记

OpenClaw + Docker 踩坑全记录

更新于:
编辑本页

与其冒着风险在宿主机上裸跑,不如把 OpenClaw 关进 Docker 的“笼子”里。

最近 OpenClaw(原名 Moltbot/Clawdbot)在 AI 圈子里火得不行,但也因为其极高的系统权限让不少开发者心生顾虑。如果你也想安全、优雅地运行这个“全能 AI 智能体”,这篇指南值得收藏。

为什么选择 Docker?

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                  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

第三步:访问 Web 仪表盘

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-2c195262464e

然而,你很可能会遇到如下错误:

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=1da6c798771848e6f058bf6b419c9bb9be592249e1d39da0 \
  openclaw-gateway \
  node dist/index.js devices list
Pending (1)
┌──────────────────────────────────────┬────────────────────────────────┬──────────┬──────────────┬──────────┬────────┐
 Request Device Role IP Age Flags
├──────────────────────────────────────┼────────────────────────────────┼──────────┼──────────────┼──────────┼────────┤
 b14fbe12-87c7-4d83-8ca4-1ff4da86a92d e6df4d58a042166054358de153a662 operator 192.168.65.1 just now
 d443b7269e22b92174dfe9c644f28f
 5b78
└──────────────────────────────────────┴────────────────────────────────┴──────────┴──────────────┴──────────┴────────┘
docker compose exec -T \
  -e OPENCLAW_GATEWAY_TOKEN=1da6c798771848e6f058bf6b419c9bb9be592249e1d39da0 \
  openclaw-gateway \
  node dist/index.js devices approve b14fbe12-87c7-4d83-8ca4-1ff4da86a92d
Approved e6df4d58a042166054358de153a662d443b7269e22b92174dfe9c644f28f5b78 (b14fbe12-87c7-4d83-8ca4-1ff4da86a92d)

同样的,如果你要查看状态也需要加上-e OPENCLAW_GATEWAY_TOKEN:

docker compose exec -T \
  -e OPENCLAW_GATEWAY_TOKEN=1da6c798771848e6f058bf6b419c9bb9be592249e1d39da0 \
  openclaw-gateway \
  node dist/index.js health

  docker compose exec -T \
  -e OPENCLAW_GATEWAY_TOKEN=1da6c798771848e6f058bf6b419c9bb9be592249e1d39da0 \
  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有帮助请点赞收藏。


编辑本页
扫描二维码分享
打开应用扫一扫,即可分享