OpenClaw 测试

记录部署 OpenClaw 的过程和遇到的问题

这几天 OpenClaw 非常火,国内外俨然把 ta 当成了新时代人类进化的方向。新闻里腾讯总部大楼下免费安装龙虾的队伍被排得水泄不通,深圳市政府和工信部也来凑热闹。我上个月微信公众号科研(摸鱼)的时候稍微了解了下龙虾,当时感觉和 Cursor、CodeX 这些 ai agent 没什么太大区别。最近刚开学闲着无聊,就上手体验了一下,感觉还是比较新奇。这篇博客简单记录一下部署龙虾过程中遇到的问题。

Docker 镜像拉取

对于我这样的懒人来说,从零开始编译运行比要了命都难受,一堆环境报错能把我整到怀疑人生。刚好看到龙虾官方最近提供了一个镜像,日期为 3 月 2 日,感觉比较新就直接用了。

首先是建立一个工作空间,拉镜像:

1
2
mkdir -p openclaw_workspace/data
mkdir -p openclaw_workspace/config

进入工作空间,建两个配置文件:

1
2
3
cd openclaw_workspace
touch .env
touch docker-compose.yml

.env 文件的配置我是根据 Gemini 的建议改的:

1
2
3
4
5
6
7
8
# 1. 代理转发配置(用于拉取 GitHub 代码、海外依赖库等,这里因为后续 clash 开了 TUM 模式就注释掉了)
# HTTP_PROXY=http://127.18.0.1:7890
# HTTPS_PROXY=http://127.18.0.1:7890
# 强制服务监听所有网络接口,允许跨容器访问
HOST=0.0.0.0

# 2. 代理豁免名单(这里后续发现也没什么作用)
NO_PROXY=localhost,127.0.0.1,api.deepseek.com,open.bigmodel.cn,dashscope.aliyuncs.com,api.minimaxi.com,.feishu.cn

docker-compose.yml 文件前前后后改了几遍,最后的终版如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
services:
  openclaw-agent:
    image: ghcr.io/openclaw/openclaw:latest
    container_name: openclaw_sandbox
    restart: unless-stopped
    dns:
      - 223.5.5.5
      - 119.29.29.29
    # 挂载环境变量文件
    env_file:
      - .env
    # 严格沙箱隔离:仅映射本地指定的 data 和 config 目录
    volumes:
      - ./data:/app/workspace
      - ./config:/home/node/.openclaw
    # 扩大共享内存,防止处理大型文件或 C++ 编译时因 shm 不足崩溃
    shm_size: '4gb' 
    # 开放 Gateway 通讯端口与 Browser 控制端口
    ports:
      - "18789:18789"
      - "18791:18791"

拉取 ghcr.io/openclaw/openclaw:latest 官方镜像,注意官方没有提供 /openclaw/openclaw:latest 镜像,正常是拉不下来的。后续把龙虾的工作空间和设置都映射到宿主机里面,方便在外进行修改(注意最好把 /.openclaw 一整个文件都映射进来,不然会因为权限问题影响运行)

之后直接 docker compose up -d 即可,龙虾会在沙箱里运行:

1
2
docker compose up -d
docker logs -f openclaw_sandbox

龙虾配置

图形化界面

在宿主机使用命令:

1
docker exec -it openclaw_sandbox openclaw onboard bash

直接进入图形化配置窗口,跟着 GPT 或者 Gemini 的建议选择选项即可。

浏览器配置

接着是浏览器配置,这里先打开一个有 root 权限的新终端,下载浏览器相关组件:

1
2
3
docker exec -u root -it openclaw_sandbox /bin/bash
apt-get update && apt-get install -y chromium libnss3 libxss1 libasound2 libatk-bridge2.0-0 libgtk-3-0
exit

飞书配置

飞书的官方网址:https://www.feishu.cn/content/article/7613711414611463386 给出了详细的机器人配置方法,按照他们的教程一步步做即可,这里不过多赘述。

json 文件配置

接下来也可以使用 openclaw.json 来进一步配置(因为我们上述步骤虽然创建了机器人并安装了浏览器,但龙虾不知道他有这些工具,我们需要修改配置文件告诉他)。因为我们提前做了映射,所以可以在宿主机 openclaw_workspace/config 的位置下找到 openclaw.json 。我目前的配置如下,密码等信息已删除:

openclaw.json
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
{
  "meta": {
    "lastTouchedVersion": "2026.3.2",
    "lastTouchedAt": "2026-03-09T10:23:26.956Z"
  },
  "wizard": {
    "lastRunAt": "2026-03-09T08:22:51.694Z",
    "lastRunVersion": "2026.3.2",
    "lastRunCommand": "configure",
    "lastRunMode": "local"
  },
  "browser": {
    "enabled": true,
    "remoteCdpTimeoutMs": 1500,
    "remoteCdpHandshakeTimeoutMs": 3000,
    "color": "#FF4500",
    "executablePath": "/app/node_modules/.pnpm/playwright-core@1.58.2/node_modules/playwright-core/lib/server/chromium",
    "headless": true,
    "noSandbox": true,
    "attachOnly": false,
    "defaultProfile": "chrome",
    "ssrfPolicy": {
      "dangerouslyAllowPrivateNetwork": true
    },
    "profiles": {
      "openclaw": {
        "cdpPort": 18800,
        "color": "#FF4500"
      },
      "work": {
        "cdpPort": 18801,
        "color": "#0066CC"
      },
      "remote": {
        "cdpUrl": "http://10.0.0.42:9222",
        "color": "#00AA00"
      }
    }
  },
  "auth": {
    "profiles": {
      "minimax-cn:default": {
        "provider": "minimax-cn",
        "mode": "api_key"
      }
    }
  },
  "models": {
    "mode": "merge",
    "providers": {
      "minimax-cn": {
        "baseUrl": "https://api.minimaxi.com/anthropic",
        "api": "anthropic-messages",
        "authHeader": true,
        "models": [
          {
            "id": "MiniMax-M2.5",
            "name": "MiniMax M2.5",
            "reasoning": true,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0.3,
              "output": 1.2,
              "cacheRead": 0.03,
              "cacheWrite": 0.12
            },
            "contextWindow": 200000,
            "maxTokens": 8192
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "minimax-cn/MiniMax-M2.5"
      },
      "models": {
        "minimax-cn/MiniMax-M2.5": {
          "alias": "Minimax"
        }
      },
      "workspace": "/home/node/.openclaw/workspace"
    }
  },
  "tools": {
    "profile": "coding",
    "allow": [
      "read", "write", "edit",
      "exec", "process",
      "web_search", "web_fetch",
      "browser", "image",
      "memory_search", "memory_get",
      "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status",
      "message", "cron", "gateway", "agents_list"
    ],
    "deny": [
      "nodes", "canvas", "llm_task", "lobster", "apply_patch"
    ],
    "web": {
      "fetch": {
        "enabled": true,
        "maxChars": 50000,
        "maxCharsCap": 50000,
        "timeoutSeconds": 30,
        "cacheTtlMinutes": 15,
        "maxRedirects": 3,
        "userAgent": "Chrome"
      }
    },
    "exec": {
      "ask": "always"
    }
  },
  "commands": {
    "native": "auto",
    "nativeSkills": "auto",
    "restart": true,
    "ownerDisplay": "raw"
  },
  "approvals": {
    "exec": {
      "enabled": true
    }
  },
  "cron": {
    "enabled": true,
    "maxConcurrentRuns": 1
  },
  "skills": {
    "allowBundled": [
      "gog", "github", "tmux", "session-logs",
      "weather", "summarize", "clawhub",
      "healthcheck", "skill-creator"
    ]
  },
  "session": {
    "dmScope": "per-channel-peer"
  },
  "channels": {
    "feishu": {
      "enabled": true,
      "appId": "",
      "appSecret": "",
      "connectionMode": "websocket",
      "domain": "feishu",
      "groupPolicy": "open"
    }
  },
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789"
      ]
    },
    "auth": {
      "mode": "token",
      "token": ""
    },
    "tailscale": {
      "mode": "off",
      "resetOnExit": false
    }
  },
  "plugins": {
    "entries": {
      "feishu": {
        "enabled": true
      }
    },
    "installs": {
      "feishu": {
        "source": "npm",
        "spec": "@openclaw/feishu",
        "installPath": "/home/node/.openclaw/extensions/feishu",
        "version": "2026.3.7",
        "resolvedName": "@openclaw/feishu",
        "resolvedVersion": "2026.3.7",
        "resolvedSpec": "@openclaw/feishu@2026.3.7",
        "integrity": "",
        "shasum": "",
        "resolvedAt": "2026-03-09T05:16:05.797Z",
        "installedAt": "2026-03-09T05:16:09.179Z"
      }
    }
  }
}

结果:

目前因为接入的插件不多,所以感觉我的龙虾还是比较笨重的,只能实现一些简单的功能。例如查询并获取股市信息,每天定时发给我:

今天 8:01 的时候龙虾给我发信息了,真好啊,这应该是这几天里第一个主动给我发信息的人/ai了。当然也可以修改 SOUL.md 把它变成猫娘,不过这就有些恶趣味了。

神奇的 bug

运行时会遇到以下报错:

1
2
2026-03-09T11:58:01.071Z [tools] tools.profile (coding) allowlist contains unknown entries (apply_patch, cron). These entries won't match any tool unless the plugin is enabled.
2026-03-09T11:58:01.075Z [tools] tools.allow allowlist contains unknown entries (cron, gateway). These entries won't match any tool unless the plugin is enabled.

但问题是,我已经把 apply_patch 功能在 tools 里面关闭了。 cron 功能已经配置好,龙虾也可以正常调用定时器。查了 discord 和 github issues 也不太清楚为什么会有这种报错,似乎其他人报错的原因都和我不太一样。当然这些 bug 不影响正常使用,可能是因为我用的版本有些旧,所以就暂时不管了。

Licensed under CC BY-NC-SA 4.0
最后更新于 Mar 10, 2026 12:07 UTC
使用 Hugo 构建
主题 StackJimmy 设计