Skip to content

Docker Compose + 飞书部署指南

本指南介绍如何使用 Docker Compose 部署 OpenClaw 网关,并配置飞书机器人通道。适用于需要容器化部署、对接飞书(或 Lark)的场景。

前置阅读:本指南假设您已了解 OpenClaw 基本概念。如需了解更多,请参阅 Docker 安装飞书通道


前置条件

  • Docker & Docker Compose v2 已安装(Docker Desktop 或 Docker Engine)
  • Node.js >= 22(如需本地运行 CLI 工具)
  • 飞书/Lark 账号,可访问 飞书开放平台
  • 飞书插件:飞书是 OpenClaw 的插件,需要单独安装(见下方第 1 步)
  • AI 模型凭据:您的 API Token 和 Base URL(如 Anthropic、或兼容 Anthropic Messages API 的自定义端点)

快速开始

按照以下 7 步完成部署。每一步的详细说明请参阅对应的链接文档。

第 1 步:安装飞书插件

飞书通道以插件形式提供,必须先安装:

bash
openclaw plugins install @openclaw/feishu

Docker 用户:如果使用预构建镜像 ghcr.io/openclaw/openclaw:latest,该插件已预装,可跳过此步。如果使用自行构建的镜像,请确保插件已包含在镜像中。

第 2 步:创建项目目录

bash
mkdir openclaw-feishu
cd openclaw-feishu

创建 .env 文件存放敏感配置:

bash
# .env

# 网关安全
OPENCLAW_GATEWAY_TOKEN=your-secure-gateway-token

# 飞书凭据(第 3 步获取后填入)
FEISHU_APP_ID=
FEISHU_APP_SECRET=

# 自定义模型提供商(按需修改)
ANTHROPIC_AUTH_TOKEN=your_api_token_here
ANTHROPIC_BASE_URL=https://api.anthropic.com

安全提示:请将 .env 加入 .gitignore,切勿提交到版本控制。

生成令牌:在 macOS 或 Linux 上,可使用以下命令生成安全的随机令牌:

bash
openssl rand -base64 32

第 3 步:创建飞书应用

在飞书开放平台创建企业自建应用,获取 App ID 和 App Secret,配置权限并启用机器人能力。

详细步骤请参阅 飞书应用配置详解

第 4 步:编写 OpenClaw 配置

openclaw-data/ 目录下创建 openclaw.json 配置文件:

bash
mkdir -p openclaw-data
json5
{
  "agents": {
    "defaults": {
      "workspace": "/home/node/.openclaw/workspace",
      "model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
    }
  },
  "models": {
    "providers": {
      "custom-claude": {
        "baseUrl": "${ANTHROPIC_BASE_URL}",
        "apiKey": "${ANTHROPIC_AUTH_TOKEN}",
        "api": "anthropic-messages",
        "models": [
          {
            "id": "claude-sonnet-4-5-20250929",
            "name": "Claude Sonnet 4.5",
            "contextWindow": 200000,
            "maxTokens": 4096
          }
        ]
      }
    }
  },
  "channels": {
    "feishu": {
      "enabled": true,
      "domain": "feishu",
      "accounts": {
        "main": {
          "appId": "${FEISHU_APP_ID}",
          "appSecret": "${FEISHU_APP_SECRET}",
          "botName": "OpenClaw"
        }
      },
      "dmPolicy": "pairing",
      "groupPolicy": "open"
    }
  },
  "gateway": {
    "mode": "local",
    "port": 18789,
    "auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
  }
}

模型 ID:自定义端点通常需要完整的带日期后缀的模型 ID(如 claude-sonnet-4-5-20250929),短别名(如 claude-3-5-sonnet)可能会返回 422 错误。请根据您的端点支持的模型 ID 进行修改。

Lark 国际版用户请将 "domain" 改为 "lark"

完整配置说明请参阅 配置参考与故障排除

第 5 步:编写 Docker Compose

创建 docker-compose.yml

yaml
services:
  openclaw:
    image: ghcr.io/openclaw/openclaw:latest
    container_name: openclaw_feishu
    restart: unless-stopped
    network_mode: host
    env_file:
      - .env
    volumes:
      # 整个 .openclaw 目录(配置文件 + 持久化数据)
      - ./openclaw-data:/home/node/.openclaw

为什么使用 network_mode: host OpenClaw 网关绑定到容器内的 127.0.0.1。标准 Docker 端口映射通过桥接网络转发流量,网关会因来源 IP 不是 localhost 而拒绝连接。network_mode: host 让容器直接共享宿主机网络栈,从而正常访问。

macOS 用户:需要在 Docker Desktop 中启用 "Enable host networking"(设置 → 资源 → 网络)。

为什么挂载整个目录? 网关运行时需要在 .openclaw 目录下创建多个子目录(identity/credentials/canvas/ 等)。单独挂载文件会导致权限错误(EACCESEBUSY),因为容器无法在挂载点旁创建临时文件。

权限注意:Docker 镜像默认以 node 用户(uid 1000)运行。如在 Linux 上遇到权限问题:

bash
sudo chown -R 1000:1000 ./openclaw-data

第 6 步:启动并配置事件订阅

bash
docker compose up -d
docker compose logs -f

等待日志中出现 [gateway] listening,表示网关已就绪。

⚠️ 重要必须先确保容器已启动且网关正在运行,然后再去飞书开放平台配置事件订阅。如果网关未运行,长连接设置将无法保存。

[feishu] connected 将在下方事件订阅配置完成并发布应用后出现。

回到飞书开放平台,配置事件订阅:

  1. 进入 事件订阅
  2. 选择 使用长连接接收事件(WebSocket)— 无需公网 webhook URL
  3. 添加事件:im.message.receive_v1
  4. 创建版本并发布应用

详细步骤请参阅 飞书应用配置详解 — 事件订阅

第 7 步:配对机器人

  1. 在飞书中找到您的机器人,发送一条消息(如 "你好")
  2. 机器人会回复一个配对码(如 123-456
  3. 通过 CLI 批准配对:
bash
docker compose exec openclaw openclaw pairing approve feishu <CODE>

如果 openclaw 命令未找到,请使用以下替代命令:

bash
docker compose exec openclaw node dist/index.js pairing approve feishu <CODE>
  1. 配对完成后,机器人即可正常响应消息

常见操作

重启服务

bash
docker compose restart

更新镜像

bash
docker compose pull && docker compose up -d

查看配对列表

bash
docker compose exec openclaw openclaw pairing list feishu
# 或:docker compose exec openclaw node dist/index.js pairing list feishu

访问控制 UI

在浏览器中打开 http://127.0.0.1:18789/?token=<your-token>(将 <your-token> 替换为 .env 中的 OPENCLAW_GATEWAY_TOKEN 值)。

检查健康状态

bash
docker compose exec openclaw node dist/index.js health --token "<your-gateway-token>"

请将 <your-gateway-token> 替换为您在 .env 中设置的 OPENCLAW_GATEWAY_TOKEN 值。$OPENCLAW_GATEWAY_TOKEN 由主机 shell 解析,如果未在主机环境中导出该变量,需手动填入 token 值。


详细文档

相关文档