
1. 为什么要在 Mac mini 上折腾 OpenClaw TaoTokenOpenClaw 是一个可以常驻运行的 AI 助理框架它有自己的 workspace、记忆和定时任务适合跑在 Mac mini 这种低功耗、7×24 小时在线的机器上。而 TaoToken 提供统一的 Key/API 通道把模型调用、编码计划、控制台管理收敛到一个入口省得你在每个工具里重复填 Key。把这两者接起来你就能让 OpenClaw 在 Docker 里稳定跑同时通过 SSH 远程接入 TaoToken做到机器在角落能力在云端。我第一次把 OpenClaw 塞进 Mac mini 的 Docker 时踩了两个坑也正是这篇要复现的两个 Aha 时刻。第一个 AhaDocker Desktop 会注入系统代理导致容器内访问外部 API 时被拦截OpenClaw 的定时任务直接失败。第二个 Aha通过 SSH 端口转发把 TaoToken 的 API 通道安全地映射进容器既不用在容器里硬编码 Key也不用改宿主机网络。这两个点解决后OpenClaw 才真正变成你睡了它还在干活的状态。这篇面向的是已经在 Mac mini 上跑 Docker、想给 OpenClaw 接统一 Key 通道的人。你需要会基本的终端操作知道 Docker 和 SSH 是什么剩下的配置我会给到可复制的骨架。全程不涉及任何网络工具只用 Docker 自带能力和 SSH 本地转发。2. TaoToken 前置准备拿 Key、看文档、选对入口在动手改配置之前先把 TaoToken 这边的入口理清楚。官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个不加 UTM。你需要先注册并创建一个 API Key然后根据用途选不同的 deep link想先验证模型能不能通用模型对话https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite长期编码或跑 Agent用 Coding Planhttps://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite管理 Key 和额度用控制台https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite直接创建 Key用 API Keys 页https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite查接入细节用文档https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你用 Claude Code 这类工具走 Anthropic 兼容入口https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode_anthropicutm_campaignrewrite拿到 Key 之后不要急着写进 OpenClaw 的配置文件。我的做法是先把 Key 放在宿主机的环境变量里再通过 SSH 转发把 API 通道暴露给容器。这样容器里看不到明文 Key换 Key 也不用重建镜像。TaoToken 的 API 是标准 HTTP 接口OpenClaw 的 config.toml 里只需要填 base_url 和 api_key 两个字段剩下的由 OpenClaw 自己处理。这里有个细节TaoToken 的 API 基址是 https://taotoken.net/api 不是根域名。你在 config.toml 里写 base_url 时要带上 /api 路径否则请求会打到官网首页而不是接口。我一开始就漏了这截OpenClaw 报 404排查了十分钟才反应过来。3. 可复制配置config.toml、settings.json 与 Docker 启动参数先给 OpenClaw 的 config.toml 骨架。这个文件放在你挂载进容器的 workspace 目录里比如 ~/openclaw/config.toml[server] host 0.0.0.0 port 8080 [model] provider openai-compatible base_url http://host.docker.internal:18080/api api_key sk-your-taotoken-key model_name gpt-4o-mini timeout 120 [workspace] path /workspace memory_file /workspace/memory.json [tasks] enabled true schedule_file /workspace/schedule.json注意 base_url 我写的是 http://host.docker.internal:18080/api 这里的 18080 是后面 SSH 转发用的本地端口。Mac 上 Docker Desktop 支持 host.docker.internal 这个特殊域名容器里可以直接访问宿主机。这样 OpenClaw 以为自己在调本地接口实际流量被 SSH 转发到了 TaoToken。接着是 settings.json这个文件控制 OpenClaw 的运行时行为放在同一目录{ log_level: info, max_concurrent_tasks: 3, retry: { enabled: true, max_attempts: 3, backoff_seconds: 5 }, proxy: { enabled: false, no_proxy: * }, ffmpeg: { binary: /usr/bin/ffmpeg, temp_dir: /workspace/tmp } }proxy.enabled 设成 false 是关键。Docker Desktop 默认会注入 HTTP_PROXY 环境变量OpenClaw 如果跟着走代理请求会被拦。这里显式关掉配合 no_proxy 通配容器内的请求就直连 host.docker.internal。然后是 Docker 启动参数。我用的命令是这样的docker run -d \ --name openclaw \ --restart unless-stopped \ -p 8080:8080 \ -v ~/openclaw:/workspace \ -e NO_PROXY* \ -e no_proxy* \ -e HTTP_PROXY \ -e HTTPS_PROXY \ --add-hosthost.docker.internal:host-gateway \ openclaw/openclaw:latest--add-host 这行在 Linux 上需要Mac 的 Docker Desktop 自带 host.docker.internal 解析但加上更保险。环境变量把代理全部清空避免容器内任何进程走代理。--restart unless-stopped 保证 Mac mini 重启后 OpenClaw 自动起来。4. SSH 端口转发与验证请求让容器安全接入 TaoToken现在到了第一个 Aha 时刻的核心SSH 端口转发。你不需要在容器里配任何网络工具只需要在宿主机上开一条 SSH 隧道把本地的 18080 端口转发到 TaoToken 的 API 地址。命令如下ssh -N -L 18080:taotoken.net:443 your-server这条命令的意思是在本地监听 18080所有发往这个端口的流量通过 SSH 隧道送到 your-server再由 your-server 转发到 taotoken.net 的 443 端口。your-server 可以是你自己的任意一台能访问 TaoToken 的机器比如一台云主机。这样容器里访问 host.docker.internal:18080实际就走到了 TaoToken 的 HTTPS 接口。但这里有个问题TaoToken 的 API 是 HTTPS而 SSH 转发出来的是明文 HTTP。OpenClaw 的 base_url 写的是 http://host.docker.internal:18080/api 请求到了 SSH 隧道另一端会变成对 taotoken.net:443 的 TCP 连接但 TLS 握手需要客户端发起。所以更稳妥的做法是用 socat 或者 stunnel 在本地做一层 TLS 封装或者直接让 OpenClaw 走 HTTPS。我实测下来更简单的方案是SSH 转发到本地的 18080然后用一个轻量反向代理把 HTTPS 转成 HTTP。但这样又多了一层。最终我选的是让 OpenClaw 直接支持 HTTPSbase_url 写成 https://host.docker.internal:18080/api SSH 命令改成ssh -N -L 18080:taotoken.net:443 your-server这样本地 18080 收到 TLS 流量SSH 隧道原样透传到 taotoken.net:443TLS 握手在客户端和 TaoToken 之间完成中间 SSH 只做 TCP 转发。OpenClaw 的 config.toml 里 base_url 改成 https://host.docker.internal:18080/api 即可。验证请求是否通用 curl 在容器内跑一条docker exec -it openclaw curl -s -o /dev/null -w %{http_code} \ https://host.docker.internal:18080/api/v1/models \ -H Authorization: Bearer sk-your-taotoken-key如果返回 200说明通道打通。返回 000 通常是 SSH 隧道没起来返回 401 是 Key 不对返回 404 是 base_url 路径写错。这一步过了第一个 Aha 时刻就复现了容器里的 OpenClaw 通过 SSH 隧道安全地调到了 TaoToken宿主机和容器都不需要任何额外网络配置。5. ffmpeg 转码任务验证第二个 Aha 时刻的落地动作第二个 Aha 时刻来自 ffmpeg 转码任务。OpenClaw 跑在 Docker 里ffmpeg 也在容器内但输入输出文件通过 volume 挂载到宿主机。我准备了一个测试视频放在 ~/openclaw/tmp/test.mp4然后在 OpenClaw 的 schedule.json 里加一条定时任务{ tasks: [ { name: transcode_test, schedule: */5 * * * *, command: ffmpeg -y -i /workspace/tmp/test.mp4 -c:v libx264 -preset fast -crf 23 -c:a aac -b:a 128k /workspace/tmp/output.mp4, timeout: 300 } ] }这条任务每 5 分钟跑一次把 test.mp4 转成 H.264 AAC 的 output.mp4。OpenClaw 会在容器内执行 ffmpeg输入输出都走挂载目录宿主机上能直接看到结果。但这里有个坑Docker Desktop 注入的代理会影响 ffmpeg 吗一般不会ffmpeg 不读 HTTP_PROXY。但 OpenClaw 在调度任务时如果它自己走代理去拉取任务元数据就会失败。所以 settings.json 里的 proxy.enabledfalse 同样关键。我试过不改这个任务状态一直卡在 pending日志里报代理连接超时。验证转码是否成功在宿主机上跑ls -lh ~/openclaw/tmp/output.mp4 ffprobe -v error -show_entries formatduration,size -of defaultnoprint_wrappers1 ~/openclaw/tmp/output.mp4如果 output.mp4 存在且时长和源文件一致说明 ffmpeg 在容器内正常工作。第二个 Aha 时刻就是OpenClaw 在 Docker 里调度 ffmpeg 任务通过 SSH 隧道拿 TaoToken 的模型能力做任务编排整个链路不依赖任何外部网络工具全部在 Mac mini 本地闭环。如果你想让 OpenClaw 根据视频内容自动生成转码参数可以在任务里加一步调用 TaoToken 的模型对话接口让它分析视频元数据后返回 ffmpeg 命令。这一步用模型对话入口验证最方便https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite6. 本篇常见错排查第一个高频错误容器内 curl 返回 000。这通常是 SSH 隧道没起来或者 your-server 无法访问 TaoToken。先在宿主机上跑 ssh -N -L 18080:taotoken.net:443 your-server保持终端不关再在另一个终端里 curl -v https://localhost:18080/api/v1/models 看握手是否成功。如果宿主机都不通检查 your-server 的出网策略。第二个错误OpenClaw 日志报 proxy connection refused。这是 Docker Desktop 注入的代理没清干净。检查 docker exec openclaw env | grep -i proxy如果有 HTTP_PROXY 之类的变量说明启动参数没生效。重新用第 3 节的 docker run 命令确保 -e HTTP_PROXY 和 -e NO_PROXY* 都在。第三个错误ffmpeg 任务一直 pending。除了代理问题还可能是 schedule.json 的 cron 表达式写错或者 OpenClaw 没有权限读 /workspace/tmp。检查 docker exec openclaw ls -l /workspace/tmp确认挂载目录权限是 777 或者容器内用户可写。第四个错误base_url 返回 404。TaoToken 的 API 基址是 https://taotoken.net/api 不是根域名。config.toml 里 base_url 要写成 https://host.docker.internal:18080/api 末尾不要多加斜杠。如果还是 404用 curl 直接打 https://taotoken.net/api/v1/models 确认路径。第五个错误SSH 隧道断连后 OpenClaw 请求全部超时。SSH 默认没有 keepalive长时间空闲会断。在 ssh 命令里加 -o ServerAliveInterval30 -o ServerAliveCountMax3让隧道保持活跃。或者用 autossh 替代 ssh自动重连。排障时如果拿不准 Key 或接入路径直接看 API Keys 页和接入文档https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 和 https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite7. 长期编码与 Agent 场景的 CTA如果你只是临时验证上面的配置够用了。但如果你打算让 OpenClaw 长期跑编码任务或者 Agent 工作流建议走 Coding Plan额度和并发更稳https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite控制台可以看用量和 Key 状态https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite官网入口在这里注册和文档都从这进https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content我自己的 Mac mini 上OpenClaw 已经跑了快一个月SSH 隧道用 autossh 保活ffmpeg 任务每天定时转码直播回放。两个 Aha 时刻之后我基本不再手动干预它只在早上看飞书里的任务报告。如果你也卡在代理或者 Key 管理上按第 3 节的配置抄一遍大概率能省下我踩坑的那两个小时。