跳到主要内容OpenClaw Docker 部署:集成飞书钉钉 QQ 机器人的网关方案 | 极客日志Shell / BashNode.jsWeChatAI
OpenClaw Docker 部署:集成飞书钉钉 QQ 机器人的网关方案
综述由AI生成OpenClaw Docker 整合版提供飞书、钉钉、QQ 及企业微信的多平台机器人网关。通过 Docker 容器化部署,预装 OpenCode AI 助手与 Playwright 自动化工具。配置环境变量即可启动服务,支持 OpenAI 与 Claude 协议对接。文中详述了镜像拉取、Compose 编排、各平台凭证获取及常见问题排查,帮助开发者快速搭建本地 AI 聊天机器人系统。
清酒独酌14 浏览 OpenClaw Docker 部署指南
一、项目简介
OpenClaw-Docker-CN-IM 是一款容器化应用,旨在提供集成中国主流 IM 平台的 AI 机器人网关解决方案。该镜像预装并配置了飞书、钉钉、QQ 机器人、企业微信等插件,支持通过环境变量灵活配置,实现快速部署与数据持久化。
同时集成了 OpenCode AI 代码助手、Playwright 浏览器自动化工具及中文 TTS 语音合成功能,适用于需要构建多平台 IM 机器人的开发者与科研用户。
下面我们将详细介绍其 Docker 部署流程,包括环境准备、镜像拉取、容器配置、功能测试及生产环境优化建议。
二、核心特性
- 开箱即用:预装所有中国主流 IM 平台插件
- 灵活配置:通过环境变量轻松配置各平台凭证
- Docker 部署:一键启动,无需复杂配置
- 数据持久化:支持配置和工作空间数据持久化
- OpenCode AI:内置 AI 代码助手,支持智能代码生成和分析
- Playwright:预装浏览器自动化工具,支持网页操作和截图
- 中文 TTS:支持中文语音合成(Text-to-Speech)
支持的平台
IM 平台
- 飞书(Feishu/Lark)
- 钉钉(DingTalk)
- QQ 机器人(QQ Bot)
- 企业微信(WeCom)
集成工具
- OpenCode AI - AI 代码助手
- Playwright - 浏览器自动化
- 中文 TTS - 语音合成
本项目支持 OpenAI 和 Claude 两种协议,可直接对接第三方 API 服务,实现灵活的模型调用。
三、环境准备
3.1 Docker 环境安装
部署前需确保 Docker 环境已正确安装。推荐使用官方脚本或包管理器安装(适用于 Linux 系统)。
安装完成后,可通过以下命令验证 Docker 是否正常运行:
docker --version
docker info
四、镜像准备
4.1 拉取镜像
使用以下命令从 Docker Hub 拉取最新版本的 OpenClaw-Docker-CN-IM 镜像:
docker pull justlikemaki/openclaw-docker-cn-im:latest
拉取完成后,可通过以下命令验证镜像是否成功下载:
docker images | grep justlikemaki/openclaw-docker-cn-im
五、快速开始(一键部署)
按照以下步骤,可快速启动 OpenClaw-Docker-CN-IM 服务,无需复杂配置。
5.1 获取配置文件
直接复制以下完整内容,分别创建 docker-compose.yml 和 .env.example 文件(两个文件需放在同一目录下)。
5.1.1 docker-compose.yml 完整内容
version: '3.8'
services:
openclaw-gateway:
container_name:
openclaw-gateway
image:
${OPENCLAW_IMAGE}
cap_add:
-
CHOWN
-
SETUID
-
SETGID
-
DAC_OVERRIDE
user:
${OPENCLAW_RUN_USER:-0:0}
environment:
TZ:
Asia/Shanghai
HOME:
/home/node
TERM:
xterm-256color
SYNC_MODEL_CONFIG:
${SYNC_MODEL_CONFIG}
MODEL_ID:
${MODEL_ID}
IMAGE_MODEL_ID:
${IMAGE_MODEL_ID}
BASE_URL:
${BASE_URL}
API_KEY:
${API_KEY}
API_PROTOCOL:
${API_PROTOCOL}
CONTEXT_WINDOW:
${CONTEXT_WINDOW}
MAX_TOKENS:
${MAX_TOKENS}
TELEGRAM_BOT_TOKEN:
${TELEGRAM_BOT_TOKEN}
FEISHU_APP_ID:
${FEISHU_APP_ID}
FEISHU_APP_SECRET:
${FEISHU_APP_SECRET}
DINGTALK_CLIENT_ID:
${DINGTALK_CLIENT_ID}
DINGTALK_CLIENT_SECRET:
${DINGTALK_CLIENT_SECRET}
DINGTALK_ROBOT_CODE:
${DINGTALK_ROBOT_CODE}
DINGTALK_CORP_ID:
${DINGTALK_CORP_ID}
DINGTALK_AGENT_ID:
${DINGTALK_AGENT_ID}
QQBOT_APP_ID:
${QQBOT_APP_ID}
QQBOT_CLIENT_SECRET:
${QQBOT_CLIENT_SECRET}
NAPCAT_REVERSE_WS_PORT:
${NAPCAT_REVERSE_WS_PORT}
NAPCAT_HTTP_URL:
${NAPCAT_HTTP_URL}
NAPCAT_ACCESS_TOKEN:
${NAPCAT_ACCESS_TOKEN}
NAPCAT_ADMINS:
${NAPCAT_ADMINS}
WECOM_TOKEN:
${WECOM_TOKEN}
WECOM_ENCODING_AES_KEY:
${WECOM_ENCODING_AES_KEY}
WECOM_BOTS_JSON:
${WECOM_BOTS_JSON}
WORKSPACE:
${WORKSPACE}
OPENCLAW_GATEWAY_TOKEN:
${OPENCLAW_GATEWAY_TOKEN}
OPENCLAW_GATEWAY_BIND:
${OPENCLAW_GATEWAY_BIND}
OPENCLAW_GATEWAY_PORT:
${OPENCLAW_GATEWAY_PORT}
OPENCLAW_BRIDGE_PORT:
${OPENCLAW_BRIDGE_PORT}
OPENCLAW_GATEWAY_MODE:
${OPENCLAW_GATEWAY_MODE}
OPENCLAW_GATEWAY_ALLOWED_ORIGINS:
${OPENCLAW_GATEWAY_ALLOWED_ORIGINS}
OPENCLAW_GATEWAY_ALLOW_INSECURE_AUTH:
${OPENCLAW_GATEWAY_ALLOW_INSECURE_AUTH}
OPENCLAW_GATEWAY_DANGEROUSLY_DISABLE_DEVICE_AUTH:
${OPENCLAW_GATEWAY_DANGEROUSLY_DISABLE_DEVICE_AUTH}
OPENCLAW_GATEWAY_AUTH_MODE:
${OPENCLAW_GATEWAY_AUTH_MODE}
OPENCLAW_PLUGINS_ENABLED:
${OPENCLAW_PLUGINS_ENABLED}
volumes:
-
${OPENCLAW_DATA_DIR}:/home/node/.openclaw
ports:
-
"${OPENCLAW_GATEWAY_PORT}:18789"
-
"${OPENCLAW_BRIDGE_PORT}:18790"
init:
true
restart:
unless-stopped
5.1.2 .env.example 完整内容
OPENCLAW_IMAGE=justlikemaki/openclaw-docker-cn-im:latest
SYNC_MODEL_CONFIG=true
MODEL_ID=model id
IMAGE_MODEL_ID=
BASE_URL=http://xxxxx/v1
API_KEY=123456
API_PROTOCOL=openai-completions
CONTEXT_WINDOW=200000
MAX_TOKENS=8192
TELEGRAM_BOT_TOKEN=
FEISHU_APP_ID=
FEISHU_APP_SECRET=
DINGTALK_CLIENT_ID=
DINGTALK_CLIENT_SECRET=
DINGTALK_ROBOT_CODE=
DINGTALK_CORP_ID=
DINGTALK_AGENT_ID=
QQBOT_APP_ID=
QQBOT_CLIENT_SECRET=
NAPCAT_REVERSE_WS_PORT=
NAPCAT_HTTP_URL=
NAPCAT_ACCESS_TOKEN=
NAPCAT_ADMINS=
WECOM_TOKEN=
WECOM_ENCODING_AES_KEY=
WECOM_BOTS_JSON=
WORKSPACE=/home/node/.openclaw/workspace
OPENCLAW_DATA_DIR=~/.openclaw
OPENCLAW_RUN_USER=0:0
OPENCLAW_GATEWAY_TOKEN=123456
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_BRIDGE_PORT=18790
OPENCLAW_GATEWAY_MODE=local
OPENCLAW_GATEWAY_ALLOWED_ORIGINS=http://localhost
OPENCLAW_GATEWAY_ALLOW_INSECURE_AUTH=true
OPENCLAW_GATEWAY_DANGEROUSLY_DISABLE_DEVICE_AUTH=false
OPENCLAW_PLUGINS_ENABLED=true
5.2 配置环境变量
复制环境变量模板并编辑,至少配置 AI 模型相关参数:
cp .env.example .env
nano .env
最小配置示例
| 环境变量 | 说明 | 示例值 |
|---|
| MODEL_ID | AI 模型名称 | gpt-4 |
| BASE_URL | AI 服务 API 地址 | https://api.openai.com/v1 |
| API_KEY | AI 服务 API 密钥 | sk-xxx… |
| OPENCLAW_IMAGE | 镜像地址 | justlikemaki/openclaw-docker-cn-im:latest |
提示:IM 平台配置为可选项,可以先启动服务,后续再配置需要的平台。
5.3 启动服务
5.4 查看日志
5.5 停止服务
六、详细配置指南
6.1 AI 模型配置
本项目支持 OpenAI 协议和 Claude 协议两种 API 格式。
推荐模型:建议使用 gemini-3-flash-preview 模型,该模型具有超大上下文窗口、快速响应速度和优秀的性价比。
基础配置参数
| 参数 | 说明 | 默认值 |
|---|
| MODEL_ID | 模型名称 | model id |
| BASE_URL | Provider Base URL | http://xxxxx/v1 |
| API_KEY | Provider API Key | 123456 |
| API_PROTOCOL | API 协议类型 | openai-completions |
| CONTEXT_WINDOW | 模型上下文窗口大小 | 200000 |
| MAX_TOKENS | 模型最大输出 tokens | 8192 |
协议类型说明
| 协议类型 | 适用模型 | Base URL 格式 | 特殊特性 |
|---|
| openai-completions | OpenAI、Gemini 等 | 需要 /v1 后缀 | - |
| anthropic-messages | Claude | 不需要 /v1 后缀 | Prompt Caching、Extended Thinking |
配置示例
MODEL_ID=gemini-3-flash-preview
BASE_URL=http://localhost:3000/v1
API_KEY=your-api-key
API_PROTOCOL=openai-completions
CONTEXT_WINDOW=1000000
MAX_TOKENS=8192
MODEL_ID=claude-sonnet-4-5
BASE_URL=http://localhost:3000
API_KEY=your-api-key
API_PROTOCOL=anthropic-messages
CONTEXT_WINDOW=200000
MAX_TOKENS=8192
6.2 Gateway 配置
| 参数 | 说明 | 默认值 |
|---|
| OPENCLAW_GATEWAY_TOKEN | Gateway 访问令牌 | 123456 |
| OPENCLAW_GATEWAY_BIND | 绑定地址 | lan |
| OPENCLAW_GATEWAY_PORT | Gateway 端口 | 18789 |
| OPENCLAW_BRIDGE_PORT | Bridge 端口 | 18790 |
6.3 工作空间配置
| 参数 | 说明 | 默认值 |
|---|
| WORKSPACE | 工作空间目录 | /home/node/.openclaw/workspace |
6.4 IM 平台配置
6.4.1 飞书配置
-
获取飞书机器人凭证
- 在飞书开放平台创建自建应用
- 添加应用能力 - 机器人
- 在凭证页面获取 App ID 和 App Secret
- 开启所需权限
- 配置事件订阅
-
必需权限(租户级别)
- im:message(消息)
- im:message.p2p_msg:readonly(私聊)
- im:message.group_at_msg:readonly(群聊)
- im:message:send_as_bot(发送)
- im:resource(媒体)
- im:chat.members:bot_access(群成员)
- im:chat.access_event.bot_p2p_chat:read(聊天事件)
-
事件订阅
如果机器人能发消息但收不到消息,请检查此项。在飞书开放平台的应用后台,进入事件与回调页面:
- 事件配置方式:选择使用长连接接收事件(推荐)
- 添加事件订阅,勾选以下事件:
- im.message.receive_v1(接收消息)
- im.message.message_read_v1(消息已读回执)
- im.chat.member.bot.added_v1(机器人进群)
- im.chat.member.bot.deleted_v1(机器人被移出群)
-
环境变量配置
FEISHU_APP_ID=your-app-id
FEISHU_APP_SECRET=your-app-secret
6.4.2 钉钉配置
-
创建钉钉应用
- 访问钉钉开发者后台
- 创建企业内部应用
- 添加「机器人」能力
- 配置消息接收模式为 Stream 模式
- 发布应用
-
获取凭证
从开发者后台获取:Client ID(AppKey)、Client Secret(AppSecret)、Robot Code、Corp ID、Agent ID。
-
环境变量配置
DINGTALK_CLIENT_ID=your-dingtalk-client-id
DINGTALK_CLIENT_SECRET=your-dingtalk-client-secret
DINGTALK_ROBOT_CODE=your-dingtalk-robot-code
DINGTALK_CORP_ID=your-dingtalk-corp-id
DINGTALK_AGENT_ID=your-dingtalk-agent-id
6.4.3 QQ 机器人配置
-
获取 QQ 机器人凭证
- 访问 QQ 开放平台
- 创建机器人应用
- 获取 AppID 和 AppSecret
- 获取主机在公网的 IP,配置到 IP 白名单
-
环境变量配置
QQBOT_APP_ID=你的 AppID
QQBOT_CLIENT_SECRET=你的 AppSecret
6.4.4 企业微信配置
-
获取企业微信凭证
- 访问企业微信管理后台
- 进入"应用管理" - 用 API 模式创建"智能机器人"应用
- 在应用的"接收消息"配置中设置 Token 和 EncodingAESKey
- 设置"接收消息"URL 为你的服务地址,需要当前服务可公网访问
-
环境变量配置
WECOM_TOKEN=your-token
WECOM_ENCODING_AES_KEY=your-aes-key
七、高级使用
7.1 使用 Docker 命令运行
如果不使用 Docker Compose,可以直接使用 Docker 命令启动容器:
docker run -d \
--name openclaw-gateway \
--cap-add=CHOWN \
--cap-add=SETUID \
--cap-add=SETGID \
--cap-add=DAC_OVERRIDE \
-e MODEL_ID=model id \
-e BASE_URL=http://xxxxx/v1 \
-e API_KEY=123456 \
-e API_PROTOCOL=openai-completions \
-e CONTEXT_WINDOW=200000 \
-e MAX_TOKENS=8192 \
-e FEISHU_APP_ID=your-app-id \
-e FEISHU_APP_SECRET=your-app-secret \
-e DINGTALK_CLIENT_ID=your-dingtalk-client-id \
-e DINGTALK_CLIENT_SECRET=your-dingtalk-client-secret \
-e DINGTALK_ROBOT_CODE=your-dingtalk-robot-code \
-e DINGTALK_CORP_ID=your-dingtalk-corp-id \
-e DINGTALK_AGENT_ID=your-dingtalk-agent-id \
-e QQBOT_APP_ID=your-qqbot-app-id \
-e QQBOT_CLIENT_SECRET=your-qqbot-client-secret \
-e WECOM_TOKEN=your-token \
-e WECOM_ENCODING_AES_KEY=your-aes-key \
-e OPENCLAW_GATEWAY_TOKEN=123456 \
-e OPENCLAW_GATEWAY_BIND=lan \
-e OPENCLAW_GATEWAY_PORT=18789 \
-v ~/.openclaw:/home/node/.openclaw \
-v ~/.openclaw/workspace:/home/node/.openclaw/workspace \
-p 18789:18789 \
-p 18790:18790 \
--restart unless-stopped \
justlikemaki/openclaw-docker-cn-im:latest
7.2 数据持久化
容器使用以下卷进行数据持久化,确保配置和工作数据不丢失:
/home/node/.openclaw - OpenClaw 配置和数据目录
/home/node/.openclaw/workspace - 工作空间目录
7.3 端口说明
- 18789 - OpenClaw Gateway 端口
- 18790 - OpenClaw Bridge 端口
7.4 自定义配置文件
- 在宿主机创建配置文件
~/.openclaw/openclaw.json
- 挂载该目录到容器:
-v ~/.openclaw:/home/node/.openclaw
- 容器启动时会检测到已存在的配置文件,跳过自动生成
八、常见问题
容器启动时只有在配置文件不存在时才会生成新配置。如需重新生成配置,请删除现有配置文件:
rm ~/.openclaw/openclaw.json
docker-compose restart
rm -rf ~/.openclaw
docker-compose up -d
- 确认 API 服务运行中
- 检查 Base URL 是否正确(OpenAI 协议需要 /v1 后缀)
- 尝试使用 127.0.0.1 替代 localhost
- 检查 API Key 是否正确配置
- 确认环境变量 API_KEY 已设置
- 在 API Web UI 确认已配置对应提供商
- 重启容器:
docker-compose restart
- 检查是否配置了事件订阅(最容易遗漏的配置)
- 确认事件配置方式选择了"使用长连接接收事件"
- 确认已添加 im.message.receive_v1 事件
如果需要启用 Telegram,必须提供有效的 TELEGRAM_BOT_TOKEN,启用后需要执行以下命令进行配对审批:
openclaw pairing approve telegram {token}
Q: 同样的启动命令,为什么有人报错 Permission denied?
这通常不是命令本身不稳定,而是运行上下文变化导致:宿主机挂载目录所有者(UID/GID)与容器内进程用户不一致。
同样是 docker compose up -d,但目录来源不同:
- 你手动创建目录:可能是当前用户(如 1000:1000)
- Docker 自动创建或使用 sudo 创建:可能是 root:root(0:0)
本镜像最终以 node 用户运行网关;若挂载目录归属不匹配,就可能无法写入。
ls -ln ~/.openclaw
docker run --rm justlikemaki/openclaw-docker-cn-im:latest id
若容器用户是 uid=1000,而宿主机目录是 uid=0 且权限不足,就会报错。
sudo chown -R 1000:1000 ~/.openclaw
OPENCLAW_RUN_USER=1000:1000
- SELinux 场景(CentOS/RHEL/Fedora)
若权限看起来没问题但仍拒绝访问,请给挂载卷加 :Z 标签。
九、注意事项
- 确保宿主机的 18789 和 18790 端口未被占用
- 配置文件中的敏感信息(如 API 密钥、令牌)应妥善保管
- 首次运行时会自动创建必要的目录和配置文件,包括 openclaw.json 配置文件,已存在时不会覆盖
- 容器以 node 用户身份运行,确保挂载的卷有正确的权限
- IM 平台配置均为可选项,可根据实际需求选择性配置
- 使用 OpenAI 协议时,Base URL 需要包含 /v1 后缀
- 使用 Claude 协议时,Base URL 不需要 /v1 后缀
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online