ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

docker 部署 openclaw 踩坑记录:从 config.toml 骨架到 TaoToken 统一 Key 接入

docker 部署 openclaw 踩坑记录:从 config.toml 骨架到 TaoToken 统一 Key 接入 1. docker 部署 openclaw 踩坑记录从 config.toml 骨架到 TaoToken 统一 Key 接入openclaw 是一个可以自托管的 AI 网关/控制台类工具跑起来之后你能在浏览器里管理模型通道、设备配对和对话入口。它适合喜欢把服务放在自己机器上、又不想每个模型单独维护一套 Key 的人。但用 docker 部署 openclaw 的过程并不算顺滑镜像构建时缺包、容器起来就重启、Control UI 报 origin 校验失败、HTTPS 安全上下文不满足、设备配对卡住、聊天窗口 401这些坑我基本都踩了一遍。这篇就把从 config.toml 骨架到 TaoToken 统一 Key 接入的完整过程写清楚命令和配置都能直接复制遇到报错也知道该看哪一行日志。我用的环境是 Ubuntu 22.04 Docker 24 Docker Compose v2openclaw 通过源码构建镜像的方式部署。下面按「先让它跑起来再让它连上模型」的顺序来。2. 原问题与场景为什么 openclaw 部署总在配置和通道上翻车openclaw 的部署难点不在 docker 本身而在两个地方一是构建阶段依赖没有全部打进产物二是运行阶段的网关配置和 API 通道配置分离。很多人第一次部署会经历这样的循环docker compose up -d之后容器状态是Restartingdocker ps看不到正常运行的实例只能反复docker logs找线索。构建阶段最典型的是ERR_MODULE_NOT_FOUND。openclaw 的产物里引用了nostr-tools、zca-js、google-auth-library这类包但 Dockerfile 在pnpm build:docker之前没有把它们装进 workspace构建能过运行就崩。运行阶段则是网关启动校验非 loopback 访问 Control UI 时必须显式声明allowedOrigins否则网关直接拒绝启动。再往后还有设备身份、配对授权、API Key 认证三层任何一层没配好表现都是「页面能开但用不了」。所以这篇的路线是先修 Dockerfile 让镜像能稳定构建再写一份可复制的 config.toml 骨架然后把模型通道统一指向 TaoToken最后用命令验证连通性并排查常见错误。3. TaoToken 前置统一 Key 与接入地址在改配置之前先把模型通道这一侧准备好。TaoToken 的作用是把多个模型的调用收敛到一个入口和一个 Key 上openclaw 里只需要配一次 base URL 和 API Key后面换模型不用动网关配置。你需要做两件事第一拿到 API Key。打开控制台里的 API Keys 页面创建一个复制出来备用。这个 Key 就是后面 config.toml 里填的凭证。第二确认接入地址。openclaw 走 OpenAI 兼容协议时base URL 填https://taotoken.net/api注意这里不带任何查询参数。模型名按你实际要用的填比如gpt-4o-mini、claude-3-5-sonnet这类具体以控制台模型列表为准。如果你后面要做长期编码或 Agent 类任务可以顺带看一下 Coding Plan 的额度说明只是先跑通对话的话用按量 Key 就够了。接入文档里有完整的请求示例遇到字段对不上时对着查最快。注意base URL 只写到/api不要自己拼/v1openclaw 的 provider 配置里会补路径拼重了会 404。4. 可复制配置Dockerfile 补包 config.toml 骨架 compose 挂载4.1 修 Dockerfile解决 ERR_MODULE_NOT_FOUND在RUN pnpm build:docker这一行之前插入缺包的安装命令。缺哪个装哪个我这边需要的是这三个RUN pnpm add nostr-tools zca-js google-auth-library -w RUN pnpm build:docker-w表示装到 workspace 根保证构建产物能解析到。如果你日志里报的是别的包名照抄包名替换即可格式不变。4.2 config.toml 骨架openclaw 的配置可以放在config.toml里下面这份骨架覆盖网关、Control UI 和模型通道三块可以直接改[gateway] host 0.0.0.0 port 18789 [gateway.controlUi] allowedOrigins [ http://localhost:18789, https://localhost:18789, http://127.0.0.1:18789, https://你的服务器IP:18789 ] [provider.taotoken] type openai baseUrl https://taotoken.net/api apiKey sk-你的TaoTokenKey model gpt-4o-mini [devices] autoApprove false几个关键点allowedOrigins必须把你实际访问 UI 用的地址写全协议和端口都要对baseUrl只写到/apiapiKey换成你在控制台创建的那把。4.3 docker-compose.yml 挂载证书目录Control UI 要求安全上下文localhost 之外访问需要 HTTPS。先在宿主机建目录并生成自签证书mkdir -p ./certs openssl req -x509 -newkey rsa:2048 -nodes \ -keyout ./certs/key.pem -out ./certs/cert.pem \ -days 365 -subj /CNlocalhost然后在 compose 文件里挂进去services: openclaw: build: . ports: - 18789:18789 volumes: - ./config.toml:/app/config.toml - ./certs:/app/certs restart: unless-stopped挂载完成后重启容器证书路径和配置路径就都生效了。5. 验证请求与成功结果从容器状态到对话连通配置改完按顺序验证每一步都有明确的成功标志。第一步确认容器不再重启docker compose up -d docker ps看到状态是Up而不是Restarting才算过。如果还在重启直接进第 6 节。第二步看网关日志确认启动成功docker logs -f openclaw-openclaw-gateway-1成功时会看到网关监听 18789 并加载了 provider 配置没有Gateway failed to start字样。第三步验证模型通道。在容器内直接发一个请求确认 TaoToken 这条链路通docker exec -it openclaw-openclaw-gateway-1 sh curl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer sk-你的TaoTokenKey \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:ping}]}返回里带choices字段就说明 Key 和地址都对。如果返回 401检查 Key 有没有复制完整返回 404检查 base URL 是不是多写了路径。第四步设备配对。在容器内执行openclaw devices list openclaw devices approve 设备标识list会列出待配对和已配对的设备把待配对的那个标识填进approve页面上的pairing required就会消失。第五步回到浏览器打开 Control UI发一条消息。能收到模型回复整条链路就算通了。6. 本篇常见错排查容器一直重启日志报non-loopback Control UI requires gateway.controlUi.allowedOrigins这是最常见的一个。原因是网关检测到你用非 loopback 地址访问但没有显式声明允许的来源。解决就是第 4.2 节里allowedOrigins那段把你访问用的完整地址写进去包括协议、IP 和端口。改完docker compose restart。control ui requires device identity (use HTTPS or localhost secure context)浏览器把非 HTTPS 的非 localhost 页面判定为不安全上下文拿不到设备身份。两个办法一是用 localhost 访问二是按 4.3 节生成自签证书并挂载用https://你的服务器IP:18789访问。自签证书浏览器会提示不安全手动信任一次即可。访问 UI 出现pairing required设备没被授权。进容器执行openclaw devices list找到设备标识再openclaw devices approve 设备标识。如果列表是空的刷新一次页面让设备重新注册再 list。聊天窗口报HTTP 401: Invalid Authentication模型通道的 Key 不对或没生效。先在容器内执行openclaw setup重新走一遍配置向导确认 provider 的 apiKey 写的是 TaoToken 的 Key。如果向导里填过但没生效检查config.toml是否被正确挂载——docker exec进去cat /app/config.toml看一眼内容对不对。构建时报Cannot find package xxx回到 4.1 节把报错里的包名加到pnpm add那一行重新 build。注意要加在pnpm build:docker之前顺序反了不生效。改了配置但行为没变大概率是挂载路径不对或者容器没重启。确认 compose 里./config.toml:/app/config.toml这行存在然后docker compose down docker compose up -d彻底重建一次。7. 接入与排障入口上面这套流程跑通之后openclaw 的模型通道就统一收敛到 TaoToken 了后面加模型只需要改config.toml里的model字段不用再动网关。如果你在配 Key 或对接口字段时卡住直接看接入文档里面有完整的请求格式和参数说明需要新建或轮换 Key 就去 API Keys 页面操作。想先确认某个模型能不能正常返回用模型对话页面发一条测试消息最快不用动本地配置。长期跑编码或 Agent 任务的话Coding Plan 的额度模式比按量更适合可以先了解再决定。我自己的习惯是每次改完config.toml先docker exec进去cat一遍确认挂载内容再docker compose restart最后看日志里 provider 有没有加载成功。这三步做完基本不会再遇到「配置改了但没生效」的情况。
返回列表