1. MacOS 桌面环境下的 OpenClaw 部署场景与痛点
OpenClaw 是一个面向智能体编排的开源控制台,它能让你在浏览器里管理模型供应商、智能体、对话链路和网关令牌。适合谁?适合想在 MacOS 上快速搭一套本地 AI 智能体环境、又不想天天敲命令行的人。核心检索词先摆出来:MacOS 部署 OpenClaw、Docker 容器编排、Ollama 本地模型接入、1Panel 面板管理,这四件事串起来就是本篇要交付的全界面操作闭环。
我在 MacBook 上折腾这套东西时,最大的感受是:MacOS 的图形界面很舒服,但 Docker 的文件共享、端口映射、容器内访问宿主机这几件事,坑比 Linux 多。比如容器里写localhost:11434永远连不上 Ollama,必须用host.docker.internal;再比如 1Panel 要挂载/opt,但 Docker Desktop 默认不共享这个路径,不提前设置就会报Mounts denied。
所以这篇不打算只给你一段 Compose 就完事,而是把三条路径都走一遍:1Panel 应用商店路径、Docker 直接部署路径、以及两者共用的 Ollama 本地模型接入。每条路径都给可复制的配置、可验证的检查动作,以及真实会撞上的报错。你跟着做,最后能在浏览器里打开 OpenClaw 控制台,发一条对话,看到 qwen3:4b 的回复,就算闭环完成。
统一 Key 这件事放在 TaoToken 上,是因为后面不管你是接本地 Ollama 还是接云端模型,都能用同一套 Base URL 和 Key 管理,省得每个工具各配一遍。下面进入前置准备。
2. TaoToken 前置准备与 Ollama 本地模型接入
这一节解决两件事:拿到统一的模型访问凭证,以及让 Ollama 在 MacOS 上跑起来并能被容器访问。
先说 TaoToken。它的作用是给你一个统一的 API 入口,模型对话、Coding Plan、控制台、API Keys 都在一个后台里。你需要的是三件套:Base URL、API Key、Model ID。Base URL 用https://taotoken.net/api,API Key 在控制台的 API Keys 页面创建,Model ID 按你要用的模型填。控制台地址是https://taotoken.net/console,创建 Key 的页面是https://taotoken.net/api-keys。如果你后面要长期跑编码类智能体,可以看下 Coding Plan:https://taotoken.net/coding-plan。想先验证模型通不通,用模型对话页:https://taotoken.net/chat。文档在https://taotoken.net/doc。
注意:TaoToken 是合规的模型访问入口,不要把它和任何网络代理工具混为一谈。你只需要在配置里填 Base URL 和 Key 即可。
然后是 Ollama。MacOS 上直接去官网下 Ollama.app,装完打开,菜单栏会出现一个小羊驼图标。确认它在跑:
ollama --version curl http://127.0.0.1:11434/api/tags第二条命令如果返回 JSON(哪怕是空的 models 数组),说明 Ollama 服务在 11434 端口活着。接着拉模型:
ollama pull qwen3:4b拉完验证:
ollama list你应该能看到qwen3:4b这一行。再发一条测试请求:
curl http://127.0.0.1:11434/api/generate -d '{ "model": "qwen3:4b", "prompt": "用一句话说明你是什么模型", "stream": false }'返回里有response字段就说明本地模型可用。
关键点来了:Docker 容器里不能用127.0.0.1:11434访问宿主机的 Ollama。MacOS 上 Docker Desktop 提供了host.docker.internal这个域名指向宿主机。所以容器内的 Base URL 要写http://host.docker.internal:11434。你可以先在容器里验证一下:
docker run --rm curlimages/curl:latest curl -s http://host.docker.internal:11434/api/tags如果这条能返回模型列表,说明容器到 Ollama 的链路通了。这一步不过,后面 OpenClaw 配了也白配。
另外,Docker Desktop 需要设置文件共享路径。进入 Settings → Resources → File sharing,添加/opt。不然后面 1Panel 挂载/opt会直接失败。这个动作在方案一里是必须的。
3. 可复制配置:1Panel 与 Docker 两条部署路径
这一节给完整配置。先走方案一:1Panel 应用商店路径。
第一步,创建 1Panel 容器。你可以用命令行,也可以用 Docker Desktop 图形界面。命令行版本:
docker run -d \ --name 1panel \ --restart unless-stopped \ -p 10086:10086 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /opt:/opt \ 1panel/1panel:latest如果你用 Docker Desktop 图形界面,对应填:Name 填1panel,Ports 填10086,Volumes 两条:/var/run/docker.sock→/var/run/docker.sock,/opt→/opt。
第二步,拿 1Panel 登录信息。进容器执行:
docker exec -it 1panel 1pctl user-info它会输出用户名、密码、入口地址。浏览器打开http://127.0.0.1:10086,用这组账号登录。
第三步,在 1Panel 里创建模型账号。路径是:模型 → 模型账号 → 创建。字段这样填:
| 字段 | 值 |
|---|---|
| 名称 | ollama |
| 模型供应商 | Ollama |
| API Key | 任意字符串,比如taotoken-local |
| Base URL | http://host.docker.internal:11434 |
第四步,创建智能体。路径:智能体 → 创建。名称填openclaw,模型供应商选 Ollama,勾选手动输入模型,模型填ollama/qwen3:4b,模型账号选上一步的ollama。保存后会生成一个 Token,记下来。
第五步,OpenClaw 控制台配置。浏览器打开http://127.0.0.1:18789。按路径操作:Control → Overview → Gateway Access → Gateway Token,填入上一步的 Token;然后 Config → Models → Providers → ollama → Api,选择或填写ollama,Save;最后 Chat → Chat,发一条消息验证。
再走方案二:Docker 直接部署 OpenClaw。镜像用fourplayer/openclaw,端口映射 18788、18789、22:
docker run -d \ --name openclaw \ --restart unless-stopped \ -p 18788:18788 \ -p 18789:18789 \ -p 22:22 \ fourplayer/openclaw:latest如果你更习惯 Compose,用这个docker-compose.yml:
services: openclaw: image: fourplayer/openclaw:latest container_name: openclaw restart: unless-stopped ports: - "18788:18788" - "18789:18789" - "22:22" environment: - TZ=Asia/Shanghai保存后docker compose up -d。
容器起来后进控制台配置。默认智能体:Config → Agents → Defaults,Remote Embedding API Key 填你的 Key,Primary Model 填ollama/qwen3:4b。Provider 配置:Config → Models → Providers → Add Entry,Name 填ollama,Api 填ollama,Api Key 填任意字符串,Base Url 填http://host.docker.internal:11434。模型列表:在 Provider 下 Add,Api 填ollama,Id 填qwen3:4b,Name 填qwen3:4b,Reasoning 选 true。
这里的三件套要写全:Base URL 是http://host.docker.internal:11434,Key 是任意字符串(本地 Ollama 不校验),Model ID 是qwen3:4b。如果你改用 TaoToken 的云端模型,Base URL 换成https://taotoken.net/api,Key 换成控制台创建的 Key,Model ID 换成对应模型名。
4. 验证请求与成功结果:健康检查、端口连通、界面登录
配置写完不算完,得验证。这一节给具体动作和预期结果。
先看容器健康状态:
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"你应该看到1panel和openclaw都是Up状态,端口映射正确。如果某个容器是Restarting,用docker logs <容器名> --tail 50看日志。
端口连通性验证。MacOS 上用nc或curl:
nc -zv 127.0.0.1 10086 nc -zv 127.0.0.1 18789 nc -zv 127.0.0.1 11434三条都返回succeeded或open才算通。18788 和 22 也顺手测一下。
容器内到 Ollama 的连通性再确认一次:
docker exec -it openclaw curl -s http://host.docker.internal:11434/api/tags返回模型列表就对了。如果这里失败,后面 Chat 一定报错。
界面登录测试。1Panel 打开http://127.0.0.1:10086,用1pctl user-info给的账号登录,能看到仪表盘。OpenClaw 打开http://127.0.0.1:18789,进入 Control → Overview,确认 Gateway Token 已填。然后去 Chat → Chat,发一条:
你好,请用一句话介绍你自己预期结果是几秒内返回一段文本,模型标识显示qwen3:4b或ollama/qwen3:4b。如果返回空、报错或一直转圈,进下一节排查。
再补一个 API 层验证。如果你配了 TaoToken 的云端模型,可以直接测:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "ping"}] }'返回里有choices数组就说明 Key 和 Base URL 都对。这一步能帮你区分是 OpenClaw 配置问题还是模型访问问题。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
这一节按真实报错来。你撞上的大概率是下面几个。
401 Unauthorized。出现在 OpenClaw 调模型时。原因通常是 API Key 没填、填错,或者 Base URL 指向了需要鉴权的服务但 Key 无效。本地 Ollama 不校验 Key,所以如果你用 Ollama 还报 401,八成是 Provider 的 Api 字段选错了,或者 Base URL 写成了 TaoToken 的地址却没填对应 Key。检查三件套:Base URL、Key、Model ID 是否匹配同一个供应商。
local proxy failed。这个多半是容器内访问宿主机失败。MacOS 上确认 Base URL 用的是host.docker.internal而不是127.0.0.1。再确认 Ollama.app 在跑,curl http://127.0.0.1:11434/api/tags在宿主机能返回。如果还不行,检查 Docker Desktop 的网络设置,必要时重启 Docker Desktop。
reading choices 相关报错。通常是返回体不是预期的 OpenAI 兼容格式。本地 Ollama 的/api/generate和/v1/chat/completions返回结构不同。OpenClaw 里 Provider 的 Api 字段要选ollama,不要选 OpenAI 兼容模式,否则它会去解析choices字段而 Ollama 原生接口没有。如果你用 TaoToken,Api 选 OpenAI 兼容,Base URL 用https://taotoken.net/api。
OAuth 报错。出现在你试图用需要 OAuth 的云端服务但没走对流程时。本地 Ollama 不涉及 OAuth。如果你接的是需要 OAuth 的模型服务,建议改用 API Key 方式,或者用 TaoToken 的统一 Key 入口,避免每个服务各配一套 OAuth。Codex 的auth.json这类文件,如果你在用,确保 Base URL、Key、Model ID 三件套写全,路径和字段名别写错。
Mounts denied。1Panel 挂载/opt时报的。回 Docker Desktop → Settings → Resources → File sharing,把/opt加进去,Apply & Restart。
端口被占用。docker run报port is already allocated。用lsof -i :18789查谁占了,换端口或停掉占用进程。
容器起来但界面打不开。先docker ps确认 Up,再nc -zv 127.0.0.1 18789确认端口通。都通但浏览器打不开,试试http://localhost:18789而不是127.0.0.1,或者清一下浏览器缓存。
排查顺序建议:先宿主机 Ollama 通 → 再容器到宿主机通 → 再 OpenClaw 配置三件套对 → 最后 Chat 验证。一层层来,别跳。
6. 统一 Key 打通 Docker 与 Ollama 的后续用法
走到这里,你应该已经能在 MacOS 上打开 OpenClaw 控制台并发起对话了。最后说下统一 Key 的后续用法,以及几个实用技巧。
TaoToken 的价值在于,你后面不管加多少个智能体、换多少个模型,Base URL 和 Key 都不用改。本地 Ollama 用http://host.docker.internal:11434,云端模型用https://taotoken.net/api,两者可以在 OpenClaw 里并存为不同 Provider,切换时只改 Primary Model 字段。API Keys 页面管理 Key:https://taotoken.net/api-keys。接入文档:https://taotoken.net/doc。想验证新模型通不通,用模型对话:https://taotoken.net/chat。长期跑编码类 Agent,看 Coding Plan:https://taotoken.net/coding-plan。Claude Code 相关接入看:https://taotoken.net/claude-code-anthropic。
实用技巧:把docker-compose.yml和 1Panel 的模型账号配置存一份到 Git,换机器时直接复用。Ollama 模型拉取用ollama pull qwen3:4b,换模型只改 Model ID。容器健康检查可以写个脚本定时跑docker ps和nc,省得每次手动查。如果你同时用 Cline 或 CC Switch,记得三件套写全:Base URL、Key、Model ID,缺一个都会报错。
最后一步,回到 OpenClaw 的 Chat 页面,再发一条消息,确认回复正常。到这里,MacOS 上从零到可用的全界面操作闭环就完成了。