OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

2026-03-02 19:45:32 2点赞 15收藏 0评论

这阵子看到大家都在玩龙虾,虽然官方也提供了文档,大部分公众号的 Docker 参差不齐,实际部署下来也遇到了很多坑。正好最近有吃土的 VPS,重装了最新的 Debian 13,虽然各大面板(BT、1Panel 等)均提供了一键部署,但我觉得要长期用还得按自己的需求来。


1. 部署

首先需要确定使用方式,这决定了你用什么方式部署。先通过 README.md 整体了解一下这个项目。

通过阅读文档,我们知道 OpenClaw 可以跑在本地宿主机虚拟机、云服务器等载体上。如何和它对话呢?它支持非常多的渠道,我选择了 Telegram

因为小龙虾的能力上限取决于模型能力,所以毋庸置疑,直接选择当前的顶级模型:Claude 或者 GPT。

结论:最佳配置方案 = 海外 VPS + Telegram + 顶级模型

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

💡 建议先花点时间阅读一下部署文档再动手,以减少后续不必要的麻烦。

1.1 手动在云服务器上部署

git clone https://github.com/openclaw/openclaw.git cd openclaw ./docker-setup.sh

运行脚本后,会在宿主机上创建两个重要文件夹,它们会被挂载到 Docker 容器中:

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

1.2 Docker 启动

OpenClaw 后会自动打开配置引导:

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了
  1. 先选择 Skip for now 跳过

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了
  1. 消息渠道想用 Telegram,需要先做两件事:

    • 在 Telegram 中搜索 @userinfobot,获取自己账号的用户 ID

    • 搜索 @BotFather,创建机器人:

      • 先创建机器人名(昵称)

      • 再创建机器人用户名

      • 创建好后会给你一个 Bot API Token,记住这个 Token

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了
  1. 等到 Telegram (Bot API) 这里的时候,填上一步获取的 Bot API Token

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了
  1. 一路跳过,hooks 这里选择:session-memory

  2. 等出现 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 获取新配对码。

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

配对成功:

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

3. 模型选择

这里很多人都会纠结,我对比了很多家。只需要从两个角度来考虑:

按任务复杂度

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

按使用频次

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

4. Skills & MCP

Skills 推荐去 ClawHub 社区 下载,注册个账号,可以获取 API 密钥让小龙虾自己去安装。

推荐 Skills:

  • find-skills

  • Agent Browser DevTools

  • MCP auto-updater

  • Openclaw Command Center

  • self-improving-agent

  • MCP

OpenClaw Docker 部署踩坑实录:我把 8 个最致命坑踩完了

💡 因为我用的是智谱的模型,所以可以用这几个专属的 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 onboard


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

如果上面的解决不了,参考以下四步排查:

Step 1 — 修复容器网络

CLI 容器无法访问 127.0.0.1 的网关,因为容器内部的 localhost 指向自己。在 docker-compose.yml 中添加:

openclaw-cli: depends_on: - openclaw-gateway environment: OPENCLAW_GATEWAY_URL: ws://openclaw-gateway:18789

Step 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 # 选项 B — 手动将条目从 pending.json 移至 paired.json # ~/.openclaw/devices/pending.json → ~/.openclaw/devices/paired.json # 将 pending.json 清空为 {},然后重启网关

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
15
扫一下,分享更方便,购买更轻松