尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
OpenClaw在K8s Pod中稳定运行的Docker制作指南(源码版):TaoToken统一Key接入与配置骨架
1. 为什么我要把 OpenClaw 塞进 K8s Pod 里跑OpenClaw 是一个可以本地运行、通过网关对接多种消息通道的 AI 助手框架适合想在自己服务器上跑一套可控 AI 助手的开发者。它支持飞书、钉钉、企业微信、QQ 机器人等通道也能通过 Gateway 暴露 WebSocket 接口给外部设备连接。我这次的目标很明确把 OpenClaw 从源码编译成 Docker 镜像然后稳定跑在 K8s 的 Pod 里同时让容器内的模型请求统一走 TaoToken 的 API 通道用一个 Key 管理所有模型调用。之前我试过直接用社区打包好的汉化镜像在单机 Docker 里跑没问题但一放进 K8s Pod 就出问题——执行openclaw devices list直接失败设备配对流程走不下去外部设备连不上 Gateway。因为没有那版镜像的源码排查到一半就卡住了。后来干脆下载 OpenClaw 官方源码自己编译结果在 K8s Pod 里跑得稳稳当当之前的问题完全复现不出来。所以这篇就把源码构建 Docker 镜像、K8s Pod 配置、TaoToken 统一 Key 接入这条链路完整记录下来你照着做就能得到一套可复制、可调试的部署骨架。适合谁看已经在用 Docker 或 K8s 部署服务、想让 OpenClaw 在集群里长期稳定运行、并且希望模型调用走统一 API 通道的开发者。如果你只是想在本地电脑上快速体验那单机 Docker 就够了不必上 K8s。2. TaoToken 前置准备统一 Key 与通道配置在动手写 Dockerfile 之前先把模型接入这块理清楚。OpenClaw 的模型配置支持 OpenAI 兼容协议和 Anthropic 协议两种TaoToken 的 API 通道正好兼容这两种协议所以你可以用同一个 Key 去调用不同厂商的模型不用在容器里塞一堆不同平台的 Key。你需要提前做两件事第一拿到 TaoToken 的 API Key。登录控制台后在 API Keys 页面创建一个新 Key复制出来备用。这个 Key 后面会写进 OpenClaw 的配置文件里作为模型请求的凭证。第二确认你要用的模型 ID 和协议类型。TaoToken 的 API 地址是https://taotoken.net/apiOpenAI 兼容协议下 baseUrl 填这个地址即可。如果你用的是 Claude 系列模型协议选anthropic-messagesbaseUrl 同样走 TaoToken 通道。注意API Key 不要硬编码在 Dockerfile 里也不要提交到 Git。推荐用 K8s Secret 挂载成环境变量或配置文件后面 Pod 配置部分会给出具体做法。如果你还没创建 Key可以先去控制台把 Key 建好顺便在模型对话页面验证一下 Key 能不能正常调通模型。确认没问题后再往下走避免后面在容器里排查半天发现是 Key 本身的问题。3. 从源码构建 OpenClaw Docker 镜像3.1 拉取源码与确认版本先找个目录放源码我习惯放在/opt/openclawmkdir -p /opt/openclaw cd /opt/openclaw git clone https://github.com/openclaw/openclaw.git cd openclaw git checkout 98125e9982b712e129c4896891cc2e48ef2485a这里锁定一个具体 commit避免不同时间构建出来的镜像行为不一致。你如果要用更新的版本换掉 commit hash 就行但建议先在这个版本上跑通再升级。3.2 编写 Dockerfile 骨架OpenClaw 是 Node.js 项目用 pnpm 构建。Dockerfile 分两阶段构建阶段装依赖、编译产物运行阶段只拷贝必要文件和 node_modules减小镜像体积。FROM node:20-bookworm AS builder WORKDIR /build RUN corepack enable corepack prepare pnpmlatest --activate COPY package.json pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build FROM node:20-bookworm-slim RUN apt-get update apt-get install -y --no-install-recommends \ chromium ca-certificates curl jq \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --frombuilder /build/dist ./dist COPY --frombuilder /build/node_modules ./node_modules COPY --frombuilder /build/package.json ./ RUN mkdir -p /home/node/.openclaw/workspace /var/log \ chown -R node:node /home/node/.openclaw COPY init.sh /usr/local/bin/init.sh RUN chmod x /usr/local/bin/init.sh ENV OPENCLAW_STATE_DIR/home/node/.openclaw ENV OPENCLAW_WORKSPACE/home/node/.openclaw/workspace ENV PNPM_HOME/root/.local/share/pnpm EXPOSE 18789 18790 ENTRYPOINT [/usr/local/bin/init.sh]构建阶段用完整版 node 镜像装编译工具运行阶段用 slim 版只保留 chromiumOpenClaw 的浏览器工具需要和基础工具。init.sh是容器启动入口负责拉起 Gateway 进程。3.3 init.sh 启动脚本这个脚本是 K8s Pod 里 OpenClaw 能稳定运行的关键。它设置环境变量、启动 Gateway、然后保持容器不退出#!/bin/bash set -e export OPENCLAW_STATE_DIR/home/node/.openclaw export OPENCLAW_WORKSPACE/home/node/.openclaw/workspace mkdir -p $OPENCLAW_STATE_DIR $OPENCLAW_WORKSPACE chown -R node:node $OPENCLAW_STATE_DIR 2/dev/null || true echo [init] starting openclaw gateway... openclaw gateway /var/log/openclaw_running.log 21 while true; do sleep 3600 done注意这里用openclaw gateway前台进程加后台运行的方式日志重定向到/var/log/openclaw_running.log方便后面用kubectl logs或kubectl exec查看。while true循环保证容器主进程不退出否则 K8s 会认为 Pod 挂了反复重启。3.4 构建镜像docker build -t openclaw-gateway:1 .构建完成后可以本地跑一下验证docker run -d --name openclaw-test \ -p 18789:18789 \ -v /tmp/openclaw-data:/home/node/.openclaw \ openclaw-gateway:1进容器看看 Gateway 有没有起来docker exec -it openclaw-test /bin/bash cat /var/log/openclaw_running.log如果日志里出现 Gateway 监听端口的输出说明镜像本身没问题可以往 K8s 搬了。4. K8s Pod 配置与 TaoToken 接入骨架4.1 用 Secret 管理 TaoToken Key不要把 API Key 写进镜像或 ConfigMap 明文里。用 Secret 存kubectl create secret generic openclaw-secret \ --from-literalTAOTOKEN_API_KEY你的TaoToken Key \ --from-literalOPENCLAW_GATEWAY_TOKEN你的网关token4.2 openclaw.json 配置骨架OpenClaw 的模型配置在openclaw.json里。把 models.providers 指向 TaoToken 通道{ models: { mode: merge, providers: { taotoken: { baseUrl: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY}, api: openai-completions, models: [ { id: claude-sonnet-4-20250514, name: claude-sonnet-4, reasoning: false, input: [text, image], contextWindow: 200000, maxTokens: 8192 } ] } } }, agents: { defaults: { model: { primary: taotoken/claude-sonnet-4 }, workspace: /home/node/.openclaw/workspace } }, gateway: { port: 18789, mode: local, bind: lan, auth: { mode: token, token: ${OPENCLAW_GATEWAY_TOKEN} } } }这里apiKey和token用${}占位实际运行时由环境变量注入。OpenClaw 启动时会读取环境变量替换。如果你用的模型走 Anthropic 协议把api改成anthropic-messages即可baseUrl 不变。4.3 Pod 配置片段把配置文件和 Secret 挂进 PodapiVersion: v1 kind: Pod metadata: name: openclaw-gateway labels: app: openclaw spec: containers: - name: openclaw image: openclaw-gateway:1 ports: - containerPort: 18789 - containerPort: 18790 env: - name: TAOTOKEN_API_KEY valueFrom: secretKeyRef: name: openclaw-secret key: TAOTOKEN_API_KEY - name: OPENCLAW_GATEWAY_TOKEN valueFrom: secretKeyRef: name: openclaw-secret key: OPENCLAW_GATEWAY_TOKEN - name: TZ value: Asia/Shanghai volumeMounts: - name: openclaw-data mountPath: /home/node/.openclaw - name: openclaw-config mountPath: /home/node/.openclaw/openclaw.json subPath: openclaw.json resources: requests: memory: 512Mi cpu: 250m limits: memory: 2Gi cpu: 1000m volumes: - name: openclaw-data emptyDir: {} - name: openclaw-config configMap: name: openclaw-configConfigMap 里放openclaw.json内容kubectl create configmap openclaw-config --from-fileopenclaw.json注意emptyDir适合测试生产环境建议换成 PVC否则 Pod 重启后工作空间数据会丢。5. 验证配置生效与请求测试Pod 起来之后按顺序做这几步检查。第一步确认 Pod 状态和日志kubectl get pod openclaw-gateway kubectl logs openclaw-gateway日志里应该能看到 Gateway 启动、监听 18789 端口的输出。如果卡在启动阶段多半是配置文件格式问题或环境变量没注入。第二步进 Pod 验证环境变量kubectl exec -it openclaw-gateway -- /bin/bash echo $TAOTOKEN_API_KEY echo $OPENCLAW_GATEWAY_TOKEN两个变量都应该有值。如果为空检查 Secret 名称和 key 是否对得上。第三步验证模型通道是否通。在 Pod 内执行openclaw models list应该能看到taotoken/claude-sonnet-4出现在列表里。然后发一条测试请求openclaw chat --model taotoken/claude-sonnet-4 --message 你好测试一下如果返回正常文本说明 TaoToken 通道接入成功。如果报 401检查 Key 是否正确如果报连接超时检查 Pod 所在节点的网络策略是否放行了taotoken.net。第四步验证 Gateway 端口可达。从集群内另一个 Pod 或本地端口转发测试kubectl port-forward pod/openclaw-gateway 18789:18789然后本地用 curl 或 WebSocket 客户端连ws://127.0.0.1:18789带上 token 认证能握手成功就说明 Gateway 正常。6. 本篇常见错误排查错误一openclaw devices list执行失败。这是我最开始在社区镜像上遇到的问题换源码编译后消失。如果你用源码构建还遇到先确认openclaw命令在 PATH 里再检查/home/node/.openclaw目录权限。容器内用node用户跑的话挂载目录的属主必须是 node。错误二Pod 反复重启。多半是init.sh里 Gateway 启动失败后主进程退出。把openclaw gateway的输出重定向到日志文件用kubectl logs --previous看上一次崩溃的日志。常见原因是openclaw.json里 JSON 格式错误或者${TAOTOKEN_API_KEY}没被替换导致解析失败。错误三模型请求 401 或 403。检查 Secret 里的 Key 有没有多余空格检查openclaw.json里apiKey字段是否确实引用了环境变量。TaoToken 的 Key 在控制台 API Keys 页面可以重新生成确认没被禁用。错误四Gateway 端口连不上。K8s 里 Pod 之间通信默认放行但如果你的集群有 NetworkPolicy需要显式允许 18789 和 18790 端口。另外确认openclaw.json里gateway.bind设的是lan而不是loopback否则只监听本地回环外部连不进来。错误五浏览器工具报 chromium 找不到。Dockerfile 运行阶段装了 chromium但 OpenClaw 默认可能去别的路径找。在openclaw.json里显式指定browser.executablePath为/usr/bin/chromium并设headless: true、noSandbox: true容器里没有沙箱环境不加这个参数 chromium 起不来。排查完这些你的 OpenClaw 应该能在 K8s Pod 里稳定跑起来了。后面如果要接飞书、钉钉这些通道在openclaw.json的plugins里把对应插件 enabled 设为 true再把通道凭证用 Secret 注入就行整体骨架不用动。
RELATED

相关推荐

基于观测器法的气动力辨识:从飞行数据中挖掘气动导数的实用工具

基于观测器法的气动力辨识:从飞行数据中挖掘气动导数的实用工具

简介:基于状态观测器(Observer)法的气动力辨识MATLAB程序,面向航空航天专业学生、飞行控制工程师及参数辨识科研人员,旨在利用观测器解决升力、阻力等气动力参数难以直接测量的问题,为飞行器建模与控制提供…

📅 2026/9/26 10:08:20
Baserow 文件上传与文件管理完整指南:收集、存储、权限一次讲清

Baserow 文件上传与文件管理完整指南:收集、存储、权限一次讲清

Baserow 文件上传与文件管理完整指南:收集、存储、权限一次讲清 【免费下载链接】baserow Build databases, automations, apps & agents with AI — no code. Open source platform available on cloud and self-hosted. GDPR, HIPAA, SOC 2 compliant. Best A…

📅 2026/9/26 10:08:20
游戏支付平台源码与支付网关搭建:从订单表到回调验签的完整实践

游戏支付平台源码与支付网关搭建:从订单表到回调验签的完整实践

简介:这是一套面向游戏行业支付与充值场景的第三方支付平台完整源码包,适合支付网关开发、游戏运营后台及互联网金融方向的学习者参考。包体共2000个文件,压缩后约151MB,核心代码以JSP动态页面、Java类与jar包为主,搭配…

📅 2026/9/26 10:03:20
MORE NEWS

更多资讯

📰

编程从“手动挡”升“自动挡”:Cursor 配 TaoToken 接入 Claude-3.5-Sonnet 的 settings.json 骨架与验证教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

ClipCursor 配 TaoToken:settings.json 骨架与验证动作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

STM32驱动JW01-CO2-V2.2模块实战:NDIR传感器通信与抗干扰设计

1. 项目概述:为什么这个CO₂模块值得花一整天去啃透STM32驱动JW01‑CO2‑V2.2二氧化碳模块,听起来就是个“串口读个数值、OLED显示一下”的小任务——我第一次看到这个标题时也是这么想的。结果在江科大实验室调试第三块板子、重烧第七次固件、对着示波器…

📰

GPT-6 Spud倒计时:AGI前夜的多模态冲刺与TaoToken配置前瞻

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PyTorch双偏振雷达降水预测实战:从数据组织到CNN建模

简介:基于PyTorch的雷达降水预测模型完整项目包,面向气象人工智能研究与深度学习开发者,解决多源气象数据融合与降水短临预测的关键问题。项目整合雷达反射率、差分反射率、差分相移率及地面雨量计观测数据,通过自定义数据加载器完…

📰

Atlas 300V 24G推理卡部署YOLO全攻略:环境配置、模型转换与调优

Atlas 300V 24G这张卡,我前后用了大半年,身边好几个做视觉算法的同学一听到“CANN”“OM模型”就头疼,总觉得没有GPU生态顺手。实际上,只要把定位搞清楚——它是一张AI推理加速卡,不是训练卡——后面所有操作就顺了。这…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬