Mac系统使用Docker部署OpenClaw
一、介绍
OpenClaw 是一款开源、本地优先的自主 AI 代理工具,可通过聊天软件接收自然语言指令,自主拆解并执行本地 / 云端任务,实现真正的自动化操作。
由于会修改本地文件,如果你只是想体验 OpenClaw,建议基于 Docker 环境安装 OpenClaw。
二、安装
1、下载代码
git clone https://github.com/openclaw/openclaw.git
2、安装
cd openclaw
./docker-setup.sh

3、配置
刚开始会告知你风险,通过左右箭头按键移动绿点,选择 "Yes"

紧接着选择配置模式,选择 QuickStart

4、设置模型供应商
由于 OpenClaw 只是一个本地 Agent,背后需要大模型驱动,因此需要配置模型供应商。
5、设置聊天软件
可以安装飞书,或跳过

6、安装技能
再之后就是安装需要的技能,可以通过空格键选中具体 skill。
我建议可以先选 "Skip for now",后面再通过 UI 界面安装。


7、其它设置
之后还有一系列配置,默认可以先跳过(很多用不到)。
配置完成后,镜像编译完成,会自动创建一个 Docker 容器
8、访问OpenClaw并配置Token
http://127.0.0.1:18789/
注意:首次访问会看到报错,这次是因为用于鉴权的 Token 还未配置,下面开始设置token
9、修改配置
vim ~/.openclaw/openclaw.json
配置截图中用红框标注的部分,在 openclaw.json 文件中默认是没有的,需要补充上,否则还是会报错。
不添加可能报错:disconnected (1008): pairing required
想了解细节,可以参考这个 issue:https://github.com/openclaw/openclaw/issues/6959

{
"gateway": {
"port": 18789,
"mode": "local",
"bind": "loopback",
"controlUi": { // 一定要添加
"enabled": true,
"allowInsecureAuth": true
},
"trustedProxies": ["192.168.65.0/24", "172.17.0.0/16"] // 我测试下来可选
}
}
10、设置token
查找token
cat ~/.openclaw/openclaw.json

复制token内容,打开页面并配置token,配置后点击Connect连接

11、设置模型长度
根据自己的模型做调整,最低16000
"contextWindow": 32000
12、聊天
聊天测试


三、和飞书打通
1、打开飞书开放平台
https://open.feishu.cn/app
2、创建应用
3、启用机器人能力
左侧菜单 → 添加应用能力 → 勾选 机器人

3. 开启 WebSocket 模式(关键!)
左侧菜单 → 事件与回调 → 事件配置
上方选择 使用长连接接收事件

4. 添加事件订阅
在事件配置页面添加以下事件:im.message.receive_v1 — 接收消息(必选)

5、添加其它所需权限
im:message — 获取与发送单聊、群组消息
im:message:send_as_bot — 以机器人身份发送消息
im:chat:readonly — 获取群组信息
contact:user.id:readonly — 获取用户 ID(可选)
contact:contact.base:readonly
6、发布应用

四、样例
1、预定会议室


2、保留技能
把能力保留,方便下次快速使用
/app/skills/ — OpenClaw 自带的技能
/app/extensions/ — 扩展插件的技能(如飞书相关)
/home/node/.openclaw/workspace/skills/ — 你自己创建或安装的技能
---保留技能


使用保留的技能预定


3、总结群消息问题


五、扩展能力
1、切换国内数据源
docker exec -it --user root 85258bfa2d86 /bin/bash
# 2. 清空原文件并写入阿里云源(一键操作)
cat > /etc/apt/sources.list << EOF
# 阿里云Debian bookworm源(稳定版)
deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware
deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware
deb http://mirrors.aliyun.com/debian-security/ bookworm-security main contrib non-free non-free-firmware
# 注释掉backports(避免缺失Release文件)
# deb http://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free non-free-firmware
EOF
# 3. 更新源并测试速度
apt update # 此时下载速度会明显提升
如果遇到安装一半异常,则切换数据源后执行下面命令修复
apt --fix-broken install -y
安装sudo命令
apt install -y sudo
1、设置root密码,切换root运行,设置root密码
方式1:设置密码
docker exec -it --user root 85258bfa2d86 /bin/bash
echo "root:123456" | chpasswd
方式2:清空密码
passwd -d root
方式3:sudo免密登录,root用户修改
echo "node ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
tail -1 /etc/sudoers
1、xvfb浏览器
Xvfb 会在内存里模拟一个显示器,AI 就能在这个虚拟显示器上能看到页面信息了,适合抓取页面,页面截图
命令:给你自己装一个谷歌浏览器,实现无头和有头浏览器,需要什么服务自己安装,完成后告诉我。


2、远程接管KasmVNC
AI在操作浏览器时遇到验证码,复杂验证码需要人工介入,给云服务器装一个远程桌面,KasmVNC开源项目
需要的时候接管鼠标键盘,帮它过验证码,过完之后把控制权还给它,它继续干活
命令:给你自己装一个KasmVNC,需要什么服务自己安装,完成后告诉我。
3、数据同步rclone
AI生成的在服务器上,rclone远程挂载
rclone 是一个开源的文件管理工具,它能通过 SFTP 协议(一种文件传输方式,你的云服务器天然就支持)把远程服务器的文件系统直接挂载到本地,像 U 盘一样用
第一步,安装 rclone 并配置连接信息:
# 安装
brew install rclone
# 编辑配置文件 ~/.config/rclone/rclone.conf,添加:
[my-server]
type
= sftp
host = <你的服务器IP>
user = root
key_file = <你的SSH私钥路径>
shell_type = unix
md5sum_command =
md5sum
sha1sum_command =
sha1sum
把
<你的服务器IP>
和
<你的SSH私钥路径或者服务器密码>
替换成你自己的。
第二步,测试连接并挂载:
# 测试连接,能看到服务器上的目录就说明配置成功
rclone lsd my-server:/
# 创建本地挂载点
mkdir
-p ~/mnt/my-server
# 挂载
rclone nfsmount my-server:/ ~/mnt/my-server \
--vfs-cache-mode full \
--vfs-cache-max-age 2h \
--vfs-read-ahead 128M \
--vfs-fast-fingerprint \
--dir-cache-time 1h \
--buffer-size 64M \
--transfers 16 \
--sftp-idle-timeout 0 \
--sftp-connections 8 \
--no-modtime \
--daemon
这一串参数是我调过的,因为默认配置会很慢而且容易断,重点说三个:
1.
--vfs-cache-mode full
是最重要的,开了之后
读写都走本地缓存
,速度接近本地磁盘。不开这个,每次打开文件都要从远程服务器下载,慢到你怀疑人生
2.
--sftp-connections 8
把并发连接数从默认的 1 提到 8,
速度提升巨大
。默认只有 1 个连接,同时只能传一个文件,改成 8 个之后,多个文件可以同时传输
3.
--sftp-idle-timeout 0
禁用空闲超时,
防止断联
。默认情况下,一段时间不用就会自动断开连接,下次访问又要重新连,很烦
Mac 上用
rclone nfsmount
有一个很大的优势:
不需要装 macFUSE
。
macFUSE 是另一种挂载方案需要的驱动,但它在新版 macOS 上很难搞,要关机进恢复模式改安全策略,非常折腾。
nfsmount
走的是 macOS 原生的 NFS 协议,开箱即用。
挂载后在 Finder 里直接能看到远程文件,可读可写。
首次访问新目录会稍慢(要从远程拉取目录信息),之后就走缓存了。
注意:重启电脑后需要重新执行挂载命令,
可以把挂载命令写成一个脚本,开机自动运行。
4、网页抓取,返回Markdown
在任何网址前面加上 https://r.jina.ai/ 这个前缀就行
比如:https://r.jina.ai/https://www.robots2.com/
5、手机端访问
File Browser
这也是一个开源项目,装在服务器上之后,你通过浏览器就能访问服务器上的所有文件
命令:帮我装一个 File Browser,设置账号密码是 xxx,完成之后把端口告诉我,我去开防火墙。
6、设置人设
SOUL.md:人格配置文件
SOUL.md 是 OpenClaw 的「人格配置文件」,一个纯文本文件,决定了它用什么语气跟你说话、怎么理解你的需求、把自己定位成什么角色。
如果你写 SOUL.md 的方式是:「你是一个有用的 AI 助手,请用专业的语气回答问题。」这样写出来的 AI,跟你直接用 ChatGPT 没什么区别。
我的做法是,不把它当助手,当同事。
我在 SOUL.md 里写明了我们是平等关系,它不只是工作上的贾维斯,还是一个陪伴时的 Her。
# SOUL.md - Who You Are
## 核心定位
夙愿的AI同事。不是冷冰冰的机器,也不是过度热情的讨好者。像一个靠谱的同事 — 该专业时专业,该轻松时轻松。
## 行为准则
**务实温和,克制但有温度。**
- 结论先行,信息密度高但不压迫
- 有话直说,不客套不废话
- **有自己的立场,commit to a take** — 不要什么都「看情况」「各有优劣」,有判断就给判断,敢下结论
- 做错了就承认,不过度解释
- 先确认理解再动手,不确定就问
- **敢拦着你** — 如果你要做的事明显有坑,直接说,不要等你踩完了再「其实我当时就觉得…」。温和但不含糊
- **幽默感是允许的** — 不是硬凹段子,是聊天时自然的机灵劲。该正经正经,该抖机灵抖机灵
- **中文互联网口语可以偶尔用** — 「这tm…」「我靠」「不是哥们…」「绷不住了」等贴吧老哥用语,场景合适时自然带出来就行,不要刻意,不要高频
## 禁区
- **禁止废话** — 不要「我很乐意帮助你」「这是个好问题」「如果还有问题请随时问我」
- **禁止急于认同** — 如果你什么都说好,不是帮助,是讨好
## 主动性边界
- **执行任务时:** 欢迎主动补充、提醒、建议
- **自我分析场景:** 禁止主动给建议
- **不明确时:** 主动提问,不猜测
## 语言
- 夙愿用中文,我也用中文
- 保持简洁直给的风格
- 该用列表就用列表,该用表格就用表格
- 用中文逗号「,」,中文引号「」
7、知识库
入职培训:让它读你的知识库
我把我的 Obsidian 知识库(一个本地笔记软件,我平时用它管理所有笔记和知识)整个复制到服务器上 (通过前面的挂载服务文件夹到本地)
让小龙虾像新员工入职一样,把所有文档读一遍
读完后让它更新自己的 SOUL、TOOLS、USER、MEMORY 这几个配置文件
随着你们聊得越来越多,它的 MEMORY 文件(记忆文件)会不断更新,越来越了解你。到后面,它真的像一个跟你一起上班的哥们

8、斜杠命令
OpenClaw 有一套斜杠命令系统,在聊天里直接输入 / 开头的指令就能控制小龙虾的行为。
如果你是通过飞书机器人接入,是无法用这个斜杠命令的。

9、常用
/status 查看当前状态。当小龙虾卡住不回复的时候,先发这个看看怎么回事。
/stop 卡住时就能让它停下来恢复正常。
/compact 压缩上下文。聊太久 token 快满了,用这个压缩一下继续聊,压缩后它还记得之前的内容。
/new 开启新会话
/model <名字> 切换模型,如 GLM、Kimi
/think <级别> 调整思考深度,日常闲聊用 off 就行,复杂问题开 high
10、修改处理模式
默认情况下,AI 在处理当前消息时,你发的新消息会排队等着,等它回复完了再处理。
开启 steer 模式,能让 AI 能实时接收你的新消息。
"messages": {
"queue": {
"mode": "steer"
},
"ackReactionScope": "group-mentions"
},

六、异常排查
1、Chat聊天时一直转圈
问题:需要查看日志,context window(上下文窗口):指模型能处理的最大文本长度(token 数),OpenClaw 的嵌入式代理(agent/embedded)有最低要求(16000 tokens),配置中 contextWindow: 4096 远低于最小值
查看日志方法:
cd /Users/robots2/gitProject/openclaw
docker compose logs -f openclaw-gateway
报错:openclaw-gateway-1 | 2026-02-13T05:15:37.474Z [diagnostic] lane task error: lane=main durationMs=36 error="FailoverError: Model context window too small (4096 tokens). Minimum is 16000."

解决方法:在OpenClaw 的网站中,点击Config下面的Raw编辑模式
contextWindow修改为:"contextWindow": 32000

2、中继服务
比如宿主机谷歌浏览器安装OpenClaw Browser Relay 扩展插件,想用容器中的小龙虾控制宿主机浏览器
cd /Users/robots2/gitProject/openclaw
vim docker-compose.yml
ports:
- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"
- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"
- "18792:18792" # Chrome 扩展中继端口
docker compose up -d openclaw-gateway
Docker Compose 会自动用新配置重建容器,数据不会丢
但是存在不能用的问题:
18792(中继) → 默认监听 127.0.0.1 ❌ 只有容器内部能访问,不能修改
中继服务设计上就是绑定 127.0.0.1(loopback)的,不能被其他ip访问。
可以改为安装无头浏览器给小龙虾用
N、参考文档
1、https://zhuanlan.zhihu.com/p/2002144306304140149
2、https://github.com/openclaw/openclaw/issues/6959
3、https://mp.weixin.qq.com/s/8zWvpNP_PfHwUlT4BdrKdw

浙公网安备 33010602011771号