1. 为什么要在 Docker 里跑 openclaw 中文版,以及模型端点为什么必须统一
openclaw 中文版是一个把大模型能力封装成命令行与网页控制台的开源工具,能做什么?简单说,它让你在终端里用自然语言驱动模型完成搜索、写代码、操作浏览器、接入飞书或 Telegram 机器人等任务。适合谁?适合想把 AI 助手私有化部署、又不想被某个云平台绑死的开发者和小团队。而 Docker 部署是它最省心的落地方式:环境隔离、一条命令重建、数据卷持久化,服务器和 NAS 都能跑。
但真正让人头疼的不是装不上,而是装完之后模型调用端点散落各处。我见过太多人的配置:openclaw 里填一个 Key,Cline 里填一个 Key,Claude Code 里再填一个,Codex 的 auth.json 又是另一套。结果就是换模型要改五个地方,某个工具报 401 时你根本不知道是哪个 Key 过期了。这篇要解决的核心问题,就是把 openclaw 中文版的模型调用端点统一改到 TaoToken 的 Key 通道上,一次配置,多工具复用。
TaoToken 在这里扮演的角色是统一入口:它提供兼容 OpenAI 风格的 API 地址,你只需要一个 Base URL 加一个 Key,就能在 openclaw、Cline、Codex 等工具里调用同一批模型。官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 根地址是 https://taotoken.net/api 。注意 API 地址不带任何查询参数,配置时别画蛇添足。
这一节先把场景讲透:你要的是「Docker 里跑着 openclaw 中文版,它的模型请求走 TaoToken,常用命令能查状态、看日志、重启网关」。下面从镜像拉取开始,一步步给可复制的配置。
2. TaoToken 前置准备:拿 Key、认端点、避开重复配置的坑
在动 Docker 之前,先把 TaoToken 这边的三样东西准备好,否则后面容器起来了也是空转。第一样是 API Key,第二样是 Base URL,第三样是你要用的 Model ID。这三件套在 openclaw、Cline、Codex 里是通用的,记住它们能省掉大量重复劳动。
拿 Key 的路径:打开 https://taotoken.net/api-keys ,登录后创建一个新的 Key,复制出来存好。这个 Key 只显示一次,丢了只能重建。创建时建议按用途命名,比如openclaw-docker,这样以后在控制台里能一眼看出哪个 Key 是给哪台机器用的。
Base URL 固定为https://taotoken.net/api。注意很多工具要求填到/v1结尾,openclaw 的 provider 配置里通常填根地址即可,具体看下一节的字段说明。如果你在别的工具里看到要求https://taotoken.net/api/v1,那是在根地址后追加版本路径,不是另一个域名。
Model ID 需要你在模型列表里确认。打开 https://taotoken.net/models 或模型对话页 https://taotoken.net/chat 看一眼当前可用的模型名,比如claude-sonnet-4-5、gpt-4o这类。openclaw 的models.default要填的就是这个 ID,填错会直接报模型不存在。
这里有个高频坑:很多人把 TaoToken 的 Key 填进了 openclaw 的providers.deepseek.apiKey字段,因为教程里默认写的是 DeepSeek。实际上你要做的是新增一个自定义 provider,把 baseURL 指向 TaoToken,再把 Key 填进去。下一节的 JSON 片段会给出完整写法。
还有一点,TaoToken 是合规的 API 聚合入口,不是所谓的中转代理,配置时按标准 OpenAI 兼容接口对待即可。如果你同时用 Claude Code,它的配置在~/.claude/settings.json;用 Codex,配置在~/.codex/auth.json;用 Cline,配置在 VS Code 的设置里。这三处的 Base URL 和 Key 与 openclaw 保持一致,就能实现「一处换 Key,处处生效」的效果。长期做编码和 Agent 任务的话,可以了解 Coding Plan: https://taotoken.net/coding-plan 。
3. 可复制配置:docker-compose 片段、环境变量与 openclaw 模型端点改写
这一节是全文的核心,所有片段都可以直接复制。先给 docker-compose.yml,再给 openclaw 的模型配置 JSON,最后给环境变量清单。
先看 docker-compose 片段。它做了四件事:拉取中文版镜像、映射 18789 端口、挂载数据卷、通过环境变量注入 TaoToken 的 Key 和 Base URL。
services: openclaw: image: 1186258278/openclaw-zh:latest container_name: openclaw restart: unless-stopped ports: - "18789:18789" volumes: - openclaw-data:/root/.openclaw environment: - OPENCLAW_GATEWAY_MODE=local - TAOTOKEN_API_KEY=sk-你的TaoTokenKey - TAOTOKEN_BASE_URL=https://taotoken.net/api - TAOTOKEN_MODEL=claude-sonnet-4-5 command: openclaw gateway run volumes: openclaw-data:把sk-你的TaoTokenKey换成你在 api-keys 页面拿到的真实 Key,TAOTOKEN_MODEL换成你要用的模型 ID。保存为docker-compose.yml,在同目录执行docker compose up -d即可。
容器起来后,模型端点还没生效,因为 openclaw 的 provider 配置在数据卷里。你需要写一份配置。最直接的方式是进容器执行openclaw config set,但字段多的时候容易漏。推荐直接写配置文件,路径是数据卷里的/root/.openclaw/config.json。你可以先docker exec -it openclaw cat /root/.openclaw/config.json看默认结构,然后按下面这份改:
{ "gateway": { "mode": "local", "port": 18789, "bind": "lan" }, "models": { "default": "claude-sonnet-4-5" }, "providers": { "taotoken": { "type": "openai-compatible", "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "models": ["claude-sonnet-4-5", "gpt-4o"] } } }关键字段说明:providers.taotoken.type必须是openai-compatible,这样 openclaw 才知道用 OpenAI 风格的请求体;baseURL填https://taotoken.net/api,不要加/v1,openclaw 会自己拼;apiKey就是你的 TaoToken Key;models数组里列出你打算用的模型 ID,和models.default对应。
如果你更习惯用命令行改,等价的三条命令是:
docker exec -it openclaw openclaw config set providers.taotoken.type openai-compatible docker exec -it openclaw openclaw config set providers.taotoken.baseURL https://taotoken.net/api docker exec -it openclaw openclaw config set providers.taotoken.apiKey sk-你的TaoTokenKey docker exec -it openclaw openclaw config set models.default claude-sonnet-4-5改完配置要重启网关让配置生效:
docker exec -it openclaw openclaw gateway restart环境变量清单单独列一下,方便你在.env文件里管理:
| 变量名 | 作用 | 示例值 |
|---|---|---|
| TAOTOKEN_API_KEY | TaoToken 的 Key | sk-xxxx |
| TAOTOKEN_BASE_URL | API 根地址 | https://taotoken.net/api |
| TAOTOKEN_MODEL | 默认模型 ID | claude-sonnet-4-5 |
| OPENCLAW_GATEWAY_MODE | 网关模式 | local |
注意:环境变量只是给容器启动时用的,openclaw 真正读取的是数据卷里的 config.json。两者不一致时以 config.json 为准,所以改完环境变量记得同步改配置,或者干脆只用配置文件。
4. 验证请求与成功结果:三条命令确认安装成功且模型通道可用
配置写完不代表通了,必须验证。这一节给三条命令,从容器状态到模型请求逐层确认。
第一条,确认容器在跑、网关在监听:
docker ps --filter name=openclaw docker exec -it openclaw openclaw gateway status预期输出里能看到running和端口18789。如果状态是stopped,先看日志:docker logs --tail 50 openclaw。
第二条,确认模型列表能拉到,说明 Base URL 和 Key 至少格式正确:
docker exec -it openclaw openclaw models成功时会列出你在 config.json 里配置的模型 ID。如果这里报401,说明 Key 不对;报connection refused,说明 Base URL 写错了或者容器没网。
第三条,发一个真实请求,确认模型能回话:
docker exec -it openclaw openclaw run "用一句话说明你现在用的是哪个模型"成功结果会返回一段模型生成的文本,并且日志里能看到请求打到了taotoken.net。你也可以在 TaoToken 控制台的用量页面看到这次调用记录,这是最硬的证据。
如果你更喜欢网页验证,浏览器打开http://127.0.0.1:18789,用初始化时生成的 Token 登录,在对话框里发一条消息。能收到回复,说明整条链路通了。外网访问的话把127.0.0.1换成服务器公网 IP,前提是gateway.bind设成了lan且防火墙放行了 18789。
三条命令都过,就可以开始用常用命令做日常运维了。比如openclaw doctor做全面诊断,openclaw logs follow实时看日志,openclaw skills list看已装技能。这些命令在中文版里都有中文提示,照着敲就行。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth 报错对照
装的过程中报错是常态,这一节把高频错误和对应解法列清楚,你对着终端输出找就行。
401 Unauthorized:最常见。原因有三个——Key 复制时带了空格、Key 已过期或被删、Base URL 和 Key 不匹配(比如把 TaoToken 的 Key 填到了别的 provider)。解法:重新在 https://taotoken.net/api-keys 生成一个 Key,用docker exec -it openclaw openclaw config set providers.taotoken.apiKey 新Key覆盖,然后gateway restart。注意 Key 前后不要有引号和空格。
local proxy failed:这个报错通常出现在网关绑定模式不对的时候。如果你在容器里把gateway.mode设成了非 local,或者bind设成了0.0.0.0但端口没映射,就会报这个。解法:确认 docker-compose 里OPENCLAW_GATEWAY_MODE=local,并且ports映射了18789:18789。改完重建容器:docker compose down && docker compose up -d。
reading choices 相关报错:完整报错通常是error reading choices from response或cannot read property 'choices' of undefined。这说明请求发出去了,但返回体不是 OpenAI 兼容格式。原因多半是 Base URL 填成了网页地址而不是 API 地址,或者模型 ID 不存在导致返回了错误页。解法:确认baseURL是https://taotoken.net/api,确认models.default是模型列表里真实存在的 ID。可以用curl手动测一下:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的Key"返回 JSON 里有data数组就说明端点和 Key 都对。
OAuth 相关报错:如果你在配置 Claude Code 或 Codex 时看到 OAuth 字样,说明工具在尝试走账号授权而不是 API Key。openclaw 本身不走 OAuth,但如果你同时配了 Claude Code,它的~/.claude/settings.json里要显式写 API Key 模式。Codex 的~/.codex/auth.json同理,里面填的是apiKey字段而不是 token。这三件套(Base URL、Key、Model ID)在 openclaw、Claude Code、Codex、Cline 里保持一致,就不会出现某个工具走 OAuth 某个走 Key 的混乱。
容器起不来,日志报 volume 权限:数据卷挂载后属主不对。解法:docker exec -u root -it openclaw chown -R root:root /root/.openclaw,然后重启。
改了配置不生效:openclaw 有配置缓存,改完必须gateway restart。如果还不行,docker restart openclaw重建进程。
排查顺序建议固定:先docker ps看容器,再openclaw gateway status看网关,再openclaw models看模型列表,最后openclaw run发真实请求。四步定位,基本不会卡住。
6. 把 Key 通道固定下来:日常运维命令与后续接入建议
装好只是开始,日常运维才是长期成本。openclaw 中文版的常用命令按功能分几类,记住高频的几条就够用。
网关类:openclaw gateway start/stop/restart/status,改完配置重启用 restart,看状态用 status。日志类:openclaw logs follow,实时滚动,定位错误最有用。诊断类:openclaw doctor和openclaw doctor --fix,前者体检后者自动修。模型类:openclaw models列模型,openclaw models set <模型名>切默认模型。技能类:openclaw skills list/install/uninstall,装联网搜索和浏览器自动化这两个最实用。
这些命令都可以在宿主机上用docker exec -it openclaw前缀执行,不用进容器。建议把常用的几条写成 alias 或小脚本,比如alias oc='docker exec -it openclaw openclaw',之后oc gateway status就能用。
关于 Key 通道的长期维护,我的建议是:TaoToken 的 Key 只创建一次,命名为openclaw-docker,然后把这个 Key 同时填到 openclaw、Cline、Codex、Claude Code 里。以后换模型或续费,只改这一处,其他工具自动跟着变。如果你要长期跑编码和 Agent 任务,Coding Plan 比按量更划算,地址是 https://taotoken.net/coding-plan 。需要看模型对话效果,直接开 https://taotoken.net/chat 。接入文档在 https://taotoken.net/doc ,配置字段有疑问时对照着看。
最后提醒一句:gateway.bind设成lan后,务必把初始化 Token 换成强密码,并且只在你信任的网络里暴露 18789 端口。Docker 部署的便利性建立在隔离之上,别为了图省事把端口裸奔在公网。配置改完记得gateway restart,然后openclaw run发一条消息确认模型还在回话,这套流程走顺了,后面就是纯享受了。