ARTICLE DETAIL

资讯详情

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

初探小龙虾:用 Docker 与 WSL2 安装 OpenClaw 并接入 TaoToken

初探小龙虾:用 Docker 与 WSL2 安装 OpenClaw 并接入 TaoToken 1. 为什么要在 WSL2 Docker 里养这只小龙虾OpenClaw社区里叫它小龙虾是一个能读写本地文件、执行 Shell 命令、还能挂到聊天渠道上的 AI 智能体框架。它跟普通聊天机器人的区别在于它真的会动你的硬盘。所以「装在哪」这件事比「装不装得上」更值得先想清楚。我一开始也想图省事直接扔到云服务器上跑。结果发现两个问题一是云上的一键部署方案基本绑死了自家生态渠道插件只给你留一个想接别的得自己改二是小龙虾的价值恰恰在于它能碰你本地的项目目录、笔记、脚本跑在云上等于把它最有用的一半能力阉割了。那直接装在 Windows 上呢也不是不行但它的文件权限模型是按 Unix 设计的Windows 下路径和权限会各种别扭。折中方案就是 WSL2你得到一个完整的 Ubuntu 环境同时文件系统跟 Windows 互通再套一层 Docker把小龙虾关在容器里它想乱改文件也只能在挂载进去的目录里折腾。这篇就是把这套路径走完WSL2 环境检查 → Docker 跑起来 → Ollama 本地模型接上 → 再通过统一 Key 通道把模型请求切到 TaoToken最后验证对话真的能通。适合手上有台 Windows 机器、想本地跑通又不想被容器坑一整晚的人。2. 前置准备WSL2 环境与 TaoToken 通道2.1 WSL2 检查与安装先在 PowerShell管理员里确认版本。注意wsl -l -v输出的 VERSION 列必须是 2如果是 1后面 Docker 挂载会出各种诡异问题。wsl --status wsl -l -v如果还没装发行版或者版本是 1执行wsl --install -d Ubuntu-22.04 wsl --set-default-version 2装完重启进 Ubuntu 后先做一次基础更新顺便确认内核版本。小龙虾的部分依赖对内核有要求太老的镜像会在装 Chromium 那一步卡死。sudo apt update sudo apt upgrade -y uname -r2.2 在 WSL2 里装 DockerWSL2 里跑 Docker 有两种路子装 Docker Desktop 然后开 WSL 集成或者在 Ubuntu 里直接装 Docker Engine。我倾向后者少一层 Windows 侧的转发端口映射更直观。curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER newgrp docker docker versiondocker version能同时打印 Client 和 Server 两段才算通。如果只有 Client说明 daemon 没起来sudo service docker start补一下。2.3 TaoToken 通道准备模型这块我建议分两层本地 Ollama 兜底云端走 TaoToken 的统一通道。原因是本地小模型跑简单任务够用但遇到长上下文或者复杂工具调用还是得切到更强的模型而 TaoToken 的好处是一个 Key 能覆盖多家模型不用为每个厂商单独配一遍。先去控制台建一个 Key控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite建完 Key 之后接入文档里会给出 base_url 和模型名的对应关系建议开着对照配接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteAPI 端点统一是https://taotoken.net/api这个地址在后面的 settings.json 里会用到。Key 的管理页在API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite3. 可复制配置Docker 跑起 OpenClaw3.1 拉仓库与镜像选择在 WSL2 的 Ubuntu 里操作别在/mnt/c下面克隆跨文件系统的 IO 会慢到让你怀疑人生。放家目录cd ~ git clone https://github.com/openclaw/openclaw.git cd openclaw官方提供了预构建镜像能省掉本地 build 那一步。本地 build 在 WSL2 里很容易因为内存不够被 OOM Killer 干掉尤其是编译原生模块的时候。export OPENCLAW_IMAGEghcr.io/openclaw/openclaw:latest3.2 启动容器仓库里带了docker-setup.sh它会做三件事拉镜像、起容器、进 onboarding 向导。第一次跑建议前台执行方便看日志。./docker-setup.sh如果你不想用脚本也可以直接 compose 起。关键是端口和环境变量要对上docker compose up -d openclaw-gateway docker compose logs -f openclaw-gateway容器起来后网关默认监听在容器内的 3000 端口映射到宿主机。用docker compose ps确认状态是 Up 而不是 Restarting。3.3 配置 Ollama 本地模型Ollama 不在小龙虾的默认提供商列表里但它暴露了 OpenAI 兼容接口所以能当自定义 provider 接进去。先在 WSL2 里把 Ollama 跑起来curl -fsSL https://ollama.com/install.sh | sh ollama serve ollama pull qwen2.5-coder:7b验证 Ollama 自己在听curl http://127.0.0.1:11434/api/tags能返回模型列表就说明本地这层通了。接下来是接进小龙虾。这里有个坑要提前说最新文档建议优先用 Ollama 原生地址http://host:11434不要带/v1因为原生接口对工具调用的支持更完整/v1属于兼容模式某些 function call 会丢字段。容器内访问宿主机的 Ollama地址不能写localhost得用 WSL2 的宿主网关。查一下ip route | grep default假设输出是default via 172.20.0.1那 Ollama 地址就是http://172.20.0.1:11434。同时确认 Ollama 监听在0.0.0.0而不是只绑127.0.0.1export OLLAMA_HOST0.0.0.0:11434 ollama serve3.4 settings.json 骨架本地 TaoToken 双通道小龙虾的配置在~/.openclaw/config.yaml容器里对应挂载路径。下面这份骨架同时配了 Ollama 和 TaoToken 两个 provider默认走本地需要时切云端。models: providers: ollama: apiKey: ollama-local baseUrl: http://172.20.0.1:11434 taotoken: apiKey: sk-你的TaoToken密钥 baseUrl: https://taotoken.net/api modelPrefix: taotoken/ agents: defaults: model: primary: ollama/qwen2.5-coder:7b fallback: taotoken/claude-sonnet-4几个参数说明一下。apiKey对 Ollama 来说是摆设随便填它不校验baseUrl千万别带/v1modelPrefix是为了在模型选择时区分来源避免qwen这种名字跟云端模型撞车。TaoToken 那段的baseUrl就是前面说的统一端点模型名按接入文档里列的写。改完配置重启网关docker compose restart openclaw-gateway4. 验证请求确认对话真的通了配置写完不代表能用得一步步验。顺序是先验 Ollama 本身再验小龙虾能不能看到模型最后验对话。第一步容器内能不能摸到宿主机的 Ollamadocker compose exec openclaw-gateway curl http://172.20.0.1:11434/api/tags如果这里超时八成是 Ollama 没绑0.0.0.0或者 WSL2 的网关地址变了重启后会变这是 WSL2 的老毛病。第二步列模型docker compose run --rm openclaw-cli models list正常输出里应该同时出现ollama/qwen2.5-coder:7b和taotoken/开头的模型。如果只有一边回去检查对应 provider 的baseUrl。第三步直接发一句话docker compose run --rm openclaw-cli chat --prompt 用一句话说明你当前用的是哪个模型返回内容里如果带上了模型标识说明整条链路通了。想单独验 TaoToken 通道把默认模型临时切过去docker compose run --rm openclaw-cli config set agents.defaults.model.primary taotoken/claude-sonnet-4 docker compose run --rm openclaw-cli chat --prompt 你好测试云端通道想更直观地看模型对话效果也可以直接在网页端试模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite5. 本篇常见错排查5.1 容器起不来日志报 token mismatch这是 Docker 部署里出现频率最高的一个。原因是.env里的 token 和容器内已初始化的凭据对不上通常发生在你改过配置又没清数据卷的时候。处理方式是先停容器删掉数据卷再重建docker compose down docker volume ls | grep openclaw docker volume rm openclaw_openclaw-data docker compose up -d代价是之前的会话记录没了但配置能重新走一遍向导反而干净。5.2 装 Chromium 卡住不动这个在云服务器和 WSL2 里都遇到过。Chromium 的下载源在国外网络一抖就挂在那。解决办法是换国内镜像或者干脆跳过浏览器相关组件——如果你只是用命令行对话不需要它。export PUPPETEER_SKIP_DOWNLOADtrue export ELECTRON_MIRRORhttps://npmmirror.com/mirrors/electron/然后重新跑安装脚本。已经卡住的进程 CtrlC 掉清一下node_modules再重来。5.3 Ollama 连不上报 connection refused三个检查点按顺序排一是 Ollama 有没有在跑ps aux | grep ollama看一眼二是监听地址是不是0.0.0.0ss -tlnp | grep 11434确认三是 WSL2 网关地址有没有变重启 WSL 后172.20.0.1可能变成别的重新ip route查一遍同步改配置。5.4 更新版本后 UI 一直显示 UpdatingDocker 场景下 UI 里的更新提示不等于镜像真的升级了。它走的是 npm 那套逻辑但容器里的代码是镜像里的得手动拉新镜像docker compose pull docker compose up -d --force-recreate openclaw-gateway如果.env里把OPENCLAW_IMAGE固定成了某个版本号先改成latest或者目标版本再拉。5.5 工具调用失败模型说找不到函数大概率是 Ollama 走了/v1兼容模式。把baseUrl里的/v1去掉用原生http://host:11434重启网关再试。这个坑我在配 qwen 系列的时候踩过去掉/v1之后 function call 立刻正常。6. 后续怎么走从跑通到长期用跑通只是起点。真正用起来之后你会发现本地 7B 模型处理简单任务够但一旦涉及多步工具调用、长文档分析还是得靠云端模型。这时候如果每次都在配置里手动切 provider很烦。比较顺的做法是配好 fallback 链本地模型作为 primary 处理轻量请求遇到复杂任务自动落到 TaoToken 通道上的强模型。这样既省本地资源又不用改配置。如果你打算把小龙虾长期挂在后台跑定时任务、接聊天渠道那模型调用的稳定性和额度管理就变成主要矛盾。这种情况下可以看一下 Coding Plan它是按长期编码和 Agent 场景设计的比单次调用更适合这种常驻用法Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite另外提一句 Claude Code 那套 Anthropic 兼容接入小龙虾里如果要用 Claude 系模型做代码任务走这个通道比裸调 API 省事ClaudeCodeAnthropichttps://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite最后给个实用建议WSL2 的网关地址重启会变别把172.20.0.1写死在配置里。可以在启动脚本里动态取或者干脆让 Ollama 和 OpenClaw 跑在同一个 Docker 网络里用服务名互访省掉这层地址漂移的麻烦。这一步做完你这只小龙虾才算真正养稳了。
返回列表