OpenClaw(小龙虾)Docker 部署踩坑实录:我把 8 个最致命坑踩完了
这阵子看到大家都在玩龙虾,虽然官方也提供了文档,大部分公众号的 Docker 参差不齐,实际部署下来也遇到了很多坑。正好最近有吃土的 VPS,重装了最新的 Debian 13,虽然各大面板(BT、1Panel 等)均提供了一键部署,但我觉得要长期用还得按自己的需求来。
1. 部署
首先需要确定使用方式,这决定了你用什么方式部署。先通过 README.md 整体了解一下这个项目。
通过阅读文档,我们知道 OpenClaw 可以跑在本地宿主机、虚拟机、云服务器等载体上。如何和它对话呢?它支持非常多的渠道,我选择了 Telegram。
因为小龙虾的能力上限取决于模型能力,所以毋庸置疑,直接选择当前的顶级模型:Claude 或者 GPT。
结论:最佳配置方案 = 海外 VPS + Telegram + 顶级模型
💡 建议先花点时间阅读一下部署文档再动手,以减少后续不必要的麻烦。
1.1 手动在云服务器上部署
git clone https://github.com/openclaw/openclaw.git
cd openclaw
./docker-setup.sh运行脚本后,会在宿主机上创建两个重要文件夹,它们会被挂载到 Docker 容器中:
1.2 Docker 启动
OpenClaw 后会自动打开配置引导:
先选择 Skip for now 跳过
消息渠道想用 Telegram,需要先做两件事:
在 Telegram 中搜索
@userinfobot,获取自己账号的用户 ID搜索
@BotFather,创建机器人:先创建机器人名(昵称)
再创建机器人用户名
创建好后会给你一个 Bot API Token,记住这个 Token
等到
Telegram (Bot API)这里的时候,填上一步获取的 Bot API Token一路跳过,hooks 这里选择:
session-memory等出现 Token 提示,说明配置完成:
Token: 24b38f4bb1401bd949f5a2cc156e99bad6591847919f3ce0ab4cab02d69e037e大功告成。浏览器访问 http://公网IP:18789,但是这里最好用域名来访问(后面 5.2 有说明)。
2. 消息通知渠道
在服务器上执行配对命令:
# 宿主机直接执行
openclaw pairing approve telegram YKEY9974
# Docker 版执行方式
docker compose run --rm openclaw-cli pairing approve telegram YKEY9974注意:
配对码默认 1 小时过期
每个渠道待处理请求默认上限 3 个
执行命令的时候如果过期,日志会提示:
[openclaw] Failed to start CLI: Error: No pending pairing request found for code: 8AGF3F58这个需要重新在 Telegram 发送机器人 /start 获取新配对码。
配对成功:
3. 模型选择
这里很多人都会纠结,我对比了很多家。只需要从两个角度来考虑:
按任务复杂度
按使用频次
4. Skills & MCP
Skills 推荐去 ClawHub 社区 下载,注册个账号,可以获取 API 密钥让小龙虾自己去安装。
推荐 Skills:
find-skills
Agent Browser DevTools
MCP auto-updater
Openclaw Command Center
self-improving-agent
MCP
💡 因为我用的是智谱的模型,所以可以用这几个专属的 MCP,应该比第三方 MCP 的效果要好。先装上再说,不好用到时候再换就行。
5. 踩坑点
5.1 权限问题:EACCES permission denied
现象:
在 ./docker-setup.sh 启动镜像之后,出现报错:
Error: EACCES: permission denied, open '/home/node/.openclaw/openclaw.json.7.xxx.tmp'原因:
Docker 权限不够 — 容器用户(uid=1000)试图写入 root(或其他用户)拥有的目录。
解决方案:
chown -R 1000:1000 "$HOME/.openclaw"修改完权限后可以直接执行以下命令重新完成初始化向导:
docker compose run --rm openclaw-cli onboard5.2 浏览器访问 http://公网IP:18789 的安全问题
现象:
页面报错:
disconnected (1008): control ui requires HTTPS or localhost (secure context)
This page is HTTP, so the browser blocks device identity.
Use HTTPS (Tailscale Serve) or open http://127.0.0.1:18789 on the gateway host.
If you must stay on HTTP, set gateway.controlUi.allowInsecureAuth: true (token-only).相关文档:
解决方案:
开启 HTTPS,需要到服务器上去创建一个反向代理站点。这里我直接使用 Caddy 来管理多个子域名,详细过程自行搜索。
最后可以使用域名来访问小龙虾。
5.3 Docker 用户部署遇到的问题
5.3.1 disconnected (1008): pairing required
原因:
控制 UI 第一次从"新浏览器/新设备"连到 Gateway 时,需要做一次性"设备配对批准"(即使同一台机器、同一个 Tailnet 也可能需要)。
openclaw devices list
openclaw devices approve <requestId>如果上面的解决不了,参考以下四步排查:
Step 1 — 修复容器网络
CLI 容器无法访问 127.0.0.1 的网关,因为容器内部的 localhost 指向自己。在 docker-compose.yml 中添加:
openclaw-cli:
depends_on:
- openclaw-gateway
environment:
OPENCLAW_GATEWAY_URL: ws://openclaw-gateway:18789Step 2 — 设置 Gateway 绑定到局域网
内置向导默认使用回环地址,但浏览器请求是通过 Docker 的桥接网络(172.18.0.x)到达的。在 ~/.openclaw/openclaw.json 中:
"gateway": {
"bind": "lan"
}Step 3 — 同步 Gateway Token
docker-setup.sh 在 .env 文件中生成一个令牌,但引导向导会将不同的令牌写入 openclaw.json。请确保 ~/.openclaw/openclaw.json 中的 gateway.auth.token 与 .env 文件中的 OPENCLAW_GATEWAY_TOKEN 匹配。
Step 4 — 批准待匹配设备
设备卡在待处理状态,因为 CLI 无法连接到网关来批准它们:
# 选项 A — 在网关容器内直接运行
docker compose exec openclaw-gateway node dist/index.js devices list
docker compose exec openclaw-gateway node dist/index.js devices approve <request-id>
# 选项 B — 手动将条目从 pending.json 移至 paired.json
# ~/.openclaw/devices/pending.json → ~/.openclaw/devices/paired.json
# 将 pending.json 清空为 {},然后重启网关