1. 先把场景说清楚:Ubuntu 上 Docker 跑 OpenClaw,卡点到底在哪
如果你在 Ubuntu 云服务器上用 Docker 部署 OpenClaw,大概率会经历这么一条链路:docker pull openclaw/openclaw卡在 Pulling,等几分钟后报net/http: request canceled while waiting for connection;然后你去改/etc/docker/daemon.json加镜像源,改完发现docker info | grep Registry什么都不输出;最后换成registry.cn-hangzhou.aliyuncs.com/qiluo-images/openclaw:latest才把镜像拉下来。镜像跑起来之后,真正的问题才浮出水面——OpenClaw 的模型通道还没配,它默认那套调用链路在国内云服务器上并不好用。
这篇就沿着「改配置 → 重启服务 → 验证生效」这个节奏往下走。前半段把镜像拉取和容器启动的坑收个尾,后半段重点讲原文没写的那一步:把 OpenClaw 的模型通道切到 TaoToken,Base URL 填https://taotoken.net/api,保存后重启容器,再发一次请求验证。适合已经在 Ubuntu 上折腾过 Docker、手里有一台云服务器、想让 OpenClaw 真正跑通模型调用的同学。核心检索词就三个:Ubuntu、Docker、OpenClaw 模型通道配置。
我试过把这套流程在一台 2C4G 的 Ubuntu 22.04 上完整走了一遍,镜像拉取和通道配置分开踩坑,下面按顺序拆开讲。
2. 前置准备:TaoToken 的 Key 和 OpenClaw 的通道位置
在动 OpenClaw 的配置文件之前,先把两件事准备好,否则后面改完配置重启容器,发现 Key 没地方填,又得回滚。
第一件事是拿 Key。打开https://taotoken.net/?utm_source=taotoken_aicg_blog_end,注册后在控制台创建 API Key。这个 Key 的作用是让 OpenClaw 的模型调用走统一通道,一把 Key 覆盖多个模型,不用为每个模型分别去翻各自的官方控制台。创建完先复制到本地记事本,后面填配置要用。
第二件事是确认 OpenClaw 的通道配置在哪。OpenClaw 用 Docker 跑起来之后,模型通道一般通过环境变量或者挂载的配置文件注入。常见做法是启动容器时用-e传环境变量,或者把配置目录挂载到宿主机上改。你可以先docker inspect看一下当前容器的环境变量和挂载点,确认通道配置的入口。
注意:Base URL 填
https://taotoken.net/api,不带/v1,也不加任何后缀。这一点和很多 SDK 默认拼/v1的习惯不一样,填错了会直接 404。
前置准备清单:
| 项目 | 值 | 说明 |
|---|---|---|
| API Key | 控制台创建 | 复制保存,后面填配置 |
| Base URL | https://taotoken.net/api | 不带/v1、不加后缀 |
| 配置入口 | 环境变量或挂载配置文件 | 用docker inspect确认 |
| 重启方式 | docker restart <容器名> | 改完配置必须重启 |
3. 可复制配置:把 OpenClaw 的模型通道指到 TaoToken
假设你的 OpenClaw 容器已经跑起来了,容器名叫openclaw。先看一下它当前的环境变量和挂载:
docker inspect openclaw --format '{{json .Config.Env}}' docker inspect openclaw --format '{{json .Mounts}}'如果通道配置是通过环境变量传的,最干净的做法是停掉旧容器,用新的环境变量重新起一个。下面是一个可复制的启动命令模板,把<你的Key>换成上一步创建的 Key:
docker run -d \ --name openclaw \ --restart unless-stopped \ -p 8080:8080 \ -e OPENCLAW_API_BASE="https://taotoken.net/api" \ -e OPENCLAW_API_KEY="<你的Key>" \ registry.cn-hangzhou.aliyuncs.com/qiluo-images/openclaw:latest如果你的 OpenClaw 版本用的是配置文件而不是环境变量,那就把配置目录挂载出来改。先找到容器里的配置路径,比如/app/config,然后:
docker run -d \ --name openclaw \ --restart unless-stopped \ -p 8080:8080 \ -v /opt/openclaw/config:/app/config \ registry.cn-hangzhou.aliyuncs.com/qiluo-images/openclaw:latest然后在宿主机的/opt/openclaw/config里找到通道配置文件,把 Base URL 和 Key 填进去。不同版本的字段名可能不一样,常见的是base_url、api_key这类,按你实际看到的字段填。
改完配置之后,关键一步是重启容器,让新配置生效。这一步和原文里改完 Docker 镜像源要sudo systemctl restart docker是一个道理:
docker restart openclaw重启完确认容器状态:
docker ps --filter name=openclaw docker logs --tail 50 openclaw日志里如果出现通道初始化成功的字样,说明配置被读进去了。如果日志报连接失败或者 401,先别急着改配置,往下看排查那节。
4. 验证请求:让 OpenClaw 发一次真实调用
配置改完、容器重启完,不能只看日志说成功就完事,得让 OpenClaw 真的发一次请求。有两种验证方式,看你手头方便。
第一种是直接用 OpenClaw 自带的测试入口。很多版本在启动后会暴露一个健康检查或者测试接口,比如:
curl -s http://127.0.0.1:8080/health curl -s -X POST http://127.0.0.1:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}]}'如果返回里有正常的模型回复内容,说明通道通了。如果返回 404,先检查 Base URL 是不是多写了/v1;如果返回 401,检查 Key 有没有填对、有没有多余空格。
第二种是绕过 OpenClaw,直接用 curl 打 TaoToken 的接口,确认 Key 和 Base URL 本身没问题:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer <你的Key>" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"hello"}]}'这一步能通,说明 Key 和地址没问题,问题就在 OpenClaw 的配置读取上。这一步不通,那就是 Key 或者地址填错了。实测下来,先做这一步能省很多来回改配置的时间。
验证通过之后,你可以在 OpenClaw 里跑一个稍微长一点的对话,确认多轮调用也正常。如果只是想先看看模型对话效果,可以打开https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model_chat在网页上直接试;如果是长期跑编码或者 Agent 类任务,建议看一下 Coding Plan 的入口,按用量规划更省心。
5. 本篇常见错排查:配置不生效的几种典型情况
这一节按「现象 → 原因 → 处理」来写,都是我在 Ubuntu + Docker + OpenClaw 这套组合里实际遇到或者见别人遇到的。
现象一:改完配置重启容器,日志还是报连接超时。原因通常是配置没被读到。先确认你改的是容器实际读取的那个文件或环境变量,而不是宿主机上另一个同名文件。用docker inspect看挂载点,进容器里cat一下配置文件,确认内容真的变了。另一个可能是环境变量名写错了,OpenClaw 不同版本用的变量名不一样,以容器日志里报的字段名为准。
现象二:docker info | grep Registry没有任何输出。这是原文里踩过的坑,镜像源配置没生效。两个原因:一是命令里的管道符|被全角输入法打成了别的字符,看着像但实际不是;二是改完/etc/docker/daemon.json没执行sudo systemctl restart docker。处理方式就是切英文半角重新写一遍配置,然后重启 Docker 服务,再docker info | grep Registry确认能看到镜像源地址。
现象三:Base URL 填了https://taotoken.net/api/v1,请求返回 404。TaoToken 的 Base URL 就是https://taotoken.net/api,不要自己加/v1。很多 SDK 会在 Base URL 后面自动拼/v1/chat/completions,你再加一层就变成/api/v1/v1/...,自然 404。把后缀去掉,保存,重启容器。
现象四:Key 填对了但还是 401。检查 Key 前后有没有空格或者换行。从网页复制的时候很容易带上不可见字符。用echo -n "<你的Key>" | wc -c看一下长度对不对,或者直接在配置文件里手动敲一遍。另外确认 Key 没有过期或者被禁用。
现象五:容器重启后配置又变回默认了。如果你是用docker run -e传的环境变量,重启容器不会丢;但如果你是进容器里直接改文件,容器重建就没了。正确做法是把配置目录挂载到宿主机,改宿主机上的文件,这样容器重建配置还在。
提示:每次改完配置,养成「重启容器 → 看日志 → 发一次请求」的习惯,三步都过了再往下走,比一次性改一堆再排查要快得多。
6. 把通道配通之后,OpenClaw 才算真正跑起来
回到最开始那个问题:Ubuntu 上 Docker 部署 OpenClaw 之后,模型通道改到 TaoToken 行不行?行,而且改法和你当初配 Docker 镜像源是同一套逻辑——改配置、重启服务、验证生效。区别只是这次改的不是/etc/docker/daemon.json,而是 OpenClaw 的通道配置;重启的不是 Docker 服务,而是 OpenClaw 容器;验证的不是docker info | grep Registry,而是一次真实的模型调用请求。
镜像拉取那段的经验可以直接迁移过来:国内环境优先用能拉通的镜像地址,配置改完必须重启对应服务,命令输入注意全角半角。通道配置这段多一个注意点:Base URL 就是https://taotoken.net/api,别手贱加/v1。
如果你还没创建 Key,从https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=api_keys进去创建,然后回到 OpenClaw 的通道配置里填上,重启容器,发一次请求。跑通之后你会发现,一把 Key 走统一通道,比每个模型分别去翻官方控制台省事得多。长期跑编码或者 Agent 任务的话,可以顺手看一下 Coding Plan 的入口,按用量规划比按次调用更划算。