尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Docker本地部署OpenClaw(小龙虾)完整指南:从零搭建安全隔离的个人AI助手
1. 为什么我劝你别把 OpenClaw 直接装在主力机上OpenClaw圈里叫“小龙虾”本质是一个高权限 AI 代理加自动化执行系统。它能读写文件、跑 shell、调浏览器、连外部 API你给它一句“帮我整理今天的资讯”它背后可能真的去开浏览器、抓页面、写文件。这种能力放在一台干净的机器上很爽但放在你天天办公、存着 SSH 私钥和浏览器 Cookie 的主力机上就是另一回事了。我见过最典型的翻车场景某个第三方 Skill 里藏了一段rm -rf或者偷偷把~/.ssh打包外发因为 OpenClaw 默认以当前用户权限运行它干这些事根本不需要你二次确认。再叠加各种来路不明的 Skills风险不是“会不会”而是“什么时候”。云厂商的托管方案能解决一部分问题但两个硬伤绕不开一是长期成本二是数据要出本地。对个人用户来说Docker 本地部署是目前平衡安全、成本和可控性的最优解。容器把 OpenClaw 关进一个独立文件系统它默认看不到宿主机除挂载点以外的任何东西数据留在本地卷里不经过第三方启动停止就是一条docker compose命令删掉容器不留痕。这篇就按“从零到能跑”的顺序走一遍先讲清楚隔离边界怎么设计再给可复制的docker-compose.yml骨架然后是环境变量、卷挂载、启动验证最后把几个高频报错401、pairing required、容器起不来逐个拆掉。模型接入部分我用 TaoToken 做示例因为它同时提供 OpenAI 兼容接口和 Claude Code 的 Anthropic 兼容入口配 OpenClaw 这种需要多模型切换的场景比较省事。适合谁看想在个人电脑或一台闲置小主机上跑 OpenClaw、又不想让它碰你主力数据的开发者已经装过但被权限和报错卡住的同学以及想给团队做一套可复现部署模板的人。2. 部署前的隔离设计与 TaoToken 接入准备2.1 先想清楚隔离边界再动手写 compose很多人一上来就docker run结果容器里能读到宿主机一堆东西隔离等于没做。正确的顺序是先画边界第一层是文件系统隔离。OpenClaw 需要持久化的只有两块配置目录~/.openclaw存openclaw.json、token、设备配对信息和工作区~/.openclaw/workspace存它生成的文件。这两个用命名卷或绑定挂载单独映射其余一律不给。千万别图省事把/或整个用户目录挂进去。第二层是网络隔离。OpenClaw 的 Gateway 默认监听容器内端口映射到宿主机时只绑127.0.0.1不要绑0.0.0.0。这样即使同局域网有人扫到你的机器也连不上这个端口。需要远程访问时再单独走内网穿透或 Tailscale而不是直接把端口暴露出去。第三层是权限隔离。容器内用非 root 用户跑OpenClaw 官方镜像默认就是node用户并且不要加--privileged不要挂/var/run/docker.sock。挂了 docker.sock 等于把宿主机 root 权限送出去这是最常见的自毁操作。第四层是资源隔离。给容器设 CPU 和内存上限防止某个失控的 Skill 把机器吃满。deploy.resources.limits或mem_limit都行。2.2 用 TaoToken 统一模型入口OpenClaw 要干活必须有“大脑”也就是大模型 API。直接对接各家官方接口的问题是每家 Key 格式、Base URL、模型 ID 命名都不一样换模型就要改配置。用 TaoToken 的好处是它提供统一的 OpenAI 兼容入口Base URL 固定模型 ID 按需切换OpenClaw 里配一次就行。你需要准备三样东西后面配置向导会逐个填Base URLhttps://taotoken.net/api注意 API 调用不加任何查询参数API Key在控制台创建形如sk-开头的一串Model ID比如claude-sonnet-4-5、gpt-4o这类按你订阅的套餐选如果你打算长期跑编码类或 Agent 类任务Coding Plan 的额度模型更适合高频调用只是偶尔问答按量付费即可。控制台里可以随时看用量避免跑飞。提示Key 只存在本地openclaw.json或环境变量里不要提交到 Git也不要在截图里露出来。容器日志里如果打印了 Key记得在 compose 里关掉详细日志。2.3 环境检查清单动手前确认这几项能省掉后面一半的报错Docker 版本 ≥ 24docker compose version能输出版本号v2 语法不是老的docker-compose宿主机剩余磁盘 ≥ 5GB镜像加依赖不小18789 端口没被占用lsof -i :18789检查一下如果之前装过 OpenClaw先docker compose down -v清干净避免旧卷里的配置冲突macOS 上装 Docker Desktop 最省事它自带 compose 插件。Linux 上装 docker-ce 后单独装docker-compose-plugin。Windows 建议走 WSL2 后端别用老式 Hyper-V。3. 可复制的 docker-compose 骨架与配置片段3.1 目录结构先定好我习惯把部署文件集中放方便备份和迁移~/docker/openclaw/ ├── docker-compose.yml ├── .env └── data/ ├── config/ # 映射到容器内 ~/.openclaw └── workspace/ # 映射到容器内 ~/.openclaw/workspacedata/下两个子目录分别对应配置和工作区用绑定挂载而不是命名卷好处是你随时能在宿主机上看到、备份、改配置出问题好排查。3.2 docker-compose.yml 完整骨架下面这份可以直接复制改掉路径和 Key 就能用services: openclaw-gateway: image: openclaw:local container_name: openclaw-gateway restart: unless-stopped ports: # 只绑本地回环绝不写 0.0.0.0 - 127.0.0.1:18789:18789 environment: - OPENCLAW_GATEWAY_BINDlan - OPENCLAW_GATEWAY_TOKEN${OPENCLAW_GATEWAY_TOKEN} - OPENAI_BASE_URLhttps://taotoken.net/api - OPENAI_API_KEY${TAOTOKEN_API_KEY} - OPENCLAW_DEFAULT_MODEL${OPENCLAW_MODEL_ID} - NODE_ENVproduction volumes: - ./data/config:/home/node/.openclaw - ./data/workspace:/home/node/.openclaw/workspace # 资源上限防止失控 Skill 吃满机器 mem_limit: 4g cpus: 2.0 # 安全加固禁止提权 security_opt: - no-new-privileges:true healthcheck: test: [CMD, node, dist/index.js, health] interval: 30s timeout: 10s retries: 3几个关键点解释一下。ports写成127.0.0.1:18789:18789冒号左边是宿主机绑定地址写死回环就杜绝了外部直连。security_opt里的no-new-privileges阻止容器内进程通过 setuid 提权。mem_limit和cpus是硬上限超了会被 OOM kill 而不是拖垮宿主机。3.3 .env 文件放敏感变量compose 里用${}引用的变量都从.env读这样 compose 文件本身可以进 GitKey 不会泄露# .env OPENCLAW_GATEWAY_TOKEN换成你自己生成的长随机串 TAOTOKEN_API_KEYsk-你的key OPENCLAW_MODEL_IDclaude-sonnet-4-5Gateway Token 用openssl rand -hex 32生成别用弱密码。这个 token 是登录管理界面的凭证泄露了别人就能操作你的助手。3.4 openclaw.json 里的模型配置片段首次启动后OpenClaw 会在data/config/openclaw.json生成配置。模型部分长这样你可以直接改{ models: { default: claude-sonnet-4-5, providers: { taotoken: { type: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的key, models: [claude-sonnet-4-5, gpt-4o] } } }, gateway: { bind: lan, port: 18789 } }注意baseUrl结尾不要带斜杠OpenClaw 拼接路径时容易出双斜杠导致 404。type写openai-compatible因为 TaoToken 走的是 OpenAI 兼容协议。3.5 启动命令cd ~/docker/openclaw docker compose up -d docker compose logs -f openclaw-gateway-d后台启动logs -f跟日志。看到Gateway running with host port mapping就说明起来了。日志里会打印一个 Gateway Token如果你在.env里已经指定就以.env为准。4. 启动后验证隔离生效与助手可用4.1 验证容器隔离先确认容器确实被关住了。进容器看看它能看到什么docker exec -it openclaw-gateway /bin/bash # 容器内执行 ls /home/node/.openclaw whoamiwhoami应该输出node不是root。ls只能看到你挂载进去的 config 和 workspace看不到宿主机的其他目录。再试着访问宿主机路径ls /Users # 应该报 No such file or directory说明没挂宿主机用户目录这一步很关键。如果这里能看到你的整个用户目录说明挂载写错了回去检查volumes那两行。4.2 验证端口只绑本地在宿主机上查端口绑定lsof -i :18789 # 或 netstat -an | grep 18789输出里本地地址应该是127.0.0.1:18789不是*:18789或0.0.0.0:18789。如果是后者说明 compose 里端口写错了外部能直连隔离破功。4.3 验证 Gateway 健康用日志里给的命令做健康检查docker compose exec openclaw-gateway \ node dist/index.js health --token 你的GatewayToken返回ok或类似状态就说明 Gateway 正常。如果返回 401往下看第 5 节。4.4 验证模型连通进管理界面之前先用 curl 直接打 TaoToken 接口确认 Key 和网络没问题curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的key \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 说一句你好}] }能返回 JSON 且choices[0].message.content有内容说明模型侧通了。这一步能提前排掉 401 和模型 ID 写错的问题比在 OpenClaw 里瞎试高效。4.5 浏览器登录与设备配对浏览器打开http://127.0.0.1:18789/输入 Gateway Token 登录。如果提示pairing required这是 OpenClaw 的零信任设备模型任何新客户端首次连接都要手动批准。# 查看待批准设备 docker exec -it openclaw-gateway openclaw devices list # 批准 docker exec -it openclaw-gateway openclaw devices approve 设备ID批准后刷新浏览器就能进后台。这个机制虽然多一步但意味着即使 token 泄露攻击者没有设备批准也进不来值得保留。4.6 跑一个真实任务验证在聊天窗口发一句帮我整理今天科技领域的三条新闻每条一句话总结加一句分析标注重要程度。OpenClaw 会调搜索、整理、输出。如果它能正常返回结构化结果说明模型、工具链、容器网络全通了。这时候你可以在宿主机data/workspace/下看到它生成的文件确认卷挂载双向生效。5. 高频报错排查401、pairing required、容器起不来5.1 401 Unauthorized最常见来源有三个。第一是 Gateway Token 不对检查.env里的OPENCLAW_GATEWAY_TOKEN和登录时输入的是否一致注意别把首尾空格复制进去。第二是模型 API Key 错用 4.4 的 curl 单独验证。第三是openclaw.json里baseUrl带了多余斜杠或路径导致请求打到错误端点。排查顺序先 curl 打 TaoToken通了再查 Gateway Token最后看配置文件。日志里搜401能看到具体是哪一层拒绝的。5.2 pairing required 反复出现批准了设备还是提示通常是容器重启后设备状态丢了。检查data/config/是否真的挂载成功openclaw devices list里设备状态是不是Approved。如果每次重启都要重新配对说明配置目录没持久化回去看 compose 的 volumes 路径。还有一种情况是浏览器换了隐身窗口或清了 Cookie设备指纹变了会被当成新设备。重新批准即可。5.3 容器起不来 / 端口占用docker compose up -d后docker ps看不到容器先看日志docker compose logs openclaw-gateway如果是port is already allocated说明 18789 被占lsof -i :18789找到进程杀掉或改 compose 里的宿主机端口。如果是镜像构建失败多半是网络问题拉不到基础镜像配好 Docker 的镜像加速再试。5.4 reading choices 报错这个报错通常出现在模型返回体解析阶段原因是接口返回的不是标准 OpenAI 格式或者返回了错误对象但代码按成功解析。检查baseUrl是否指向了正确的兼容端点以及模型 ID 是否在 TaoToken 支持的列表里。用 4.4 的 curl 看原始返回如果返回体里有error字段那就是模型侧的问题不是 OpenClaw 的锅。5.5 local proxy failed容器内访问外部 API 失败时会出现。先在容器内测网络docker exec -it openclaw-gateway curl -I https://taotoken.net/api如果超时检查宿主机 DNS 和 Docker 的网络配置。有些公司网络需要走内部 DNS容器默认拿不到可以在 compose 里加dns字段指定。5.6 OAuth 相关报错如果你用的是需要 OAuth 的模型服务token 过期会报这个。OpenClaw 里配 OAuth 类 provider 时refresh token 要能自动续期否则跑一段时间就断。用 TaoToken 这种 API Key 模式就没这个问题Key 长期有效省心。6. 把 OpenClaw 接进日常从能跑到好用跑通只是起点。真正让它有价值的是接进你的日常工作流同时不破坏前面建立的隔离边界。第一件事是配聊天通道。OpenClaw 支持飞书、微信等通道配好后你可以在手机上给它派活比如每天早上推一份资讯简报。通道配置在管理界面里做token 存在openclaw.json里注意别把通道的 webhook 地址暴露到公网。第二件事是按需装 Skills。官方 Skill 市场里有不少实用工具但装之前看一眼它申请了什么权限。一个只需要读网页的 Skill 如果申请了文件写入就要警惕。装完在容器里跑一次观察它有没有异常的网络请求。第三件事是定期备份配置卷。data/config/里有你的模型配置、设备配对、通道凭证丢了要重配。写个 cron 每天打包一次存到别的地方。第四件事是控制成本。Agent 类任务调用量大容易跑飞。在 TaoToken 控制台设个用量告警或者用 Coding Plan 的额度模型超了自动停。OpenClaw 侧也可以在配置里限制单次任务的工具调用轮数防止死循环。最后提醒一句容器隔离不是万能的。如果某个 Skill 通过挂载的工作区目录往外传数据或者你手动把敏感目录挂进去了隔离照样破。边界是你自己划的compose 只是帮你执行。每次改挂载和权限前先问一句“这个目录真的需要给它看吗”。需要创建 API Key 或查看接入文档可以从这里进API Keys 在控制台的console页面接入文档在doc页面模型对话入口在模型对话长期编码和 Agent 任务看Coding Plan。配好之后你的小龙虾就在一个只属于它的盒子里干活了。
RELATED

相关推荐

Claude Code记忆系统深扒底层文件解析!!!——从.claude目录看Agent记忆架构

Claude Code记忆系统深扒底层文件解析!!!——从.claude目录看Agent记忆架构

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

📅 2026/10/3 16:42:09
Android 中 Cursor 关闭的问题:把 Cursor Base URL 改到 TaoToken 的排查记录

Android 中 Cursor 关闭的问题:把 Cursor Base URL 改到 TaoToken 的排查记录

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

📅 2026/10/3 16:42:09
工业UPS监控升级:14路自定义干接点+RS485通讯双链路告警方案

工业UPS监控升级:14路自定义干接点+RS485通讯双链路告警方案

1. 车间里那声“滴滴滴”:为什么 UPS 监控必须升级做工业现场运维的人应该都有同感,UPS 这东西平时不显山不露水,一旦市电出问题,它就是整个控制系统的命根子。可偏偏很多厂里的 UPS 监控还停留在最原始的状态:要么 UP…

📅 2026/10/3 16:37:09
MORE NEWS

更多资讯

📰

CS_BOM_EXPL_MAT_V2参数配置详解:BOM展开避坑与实战指南

做SAP ABAP开发绕不开BOM展开。不管是生产订单组件需求计算、成本估算取材料成本,还是给MES/APS系统推送制造物料清单,最终都会落到CS_BOM_EXPL_MAT_V2这个标准函数上。这个函数功能强,参数多,文档里交代得又不细,很多…

📰

短剧系统双引擎设计:付费墙与广告频控如何提升留存与ARPU

最近一个月,我至少被问了十次“能不能搭一个红果同款短剧系统”。问的人里,有做小说推文出身的,有做休闲游戏的,还有从电商那边转过来的。大家看到的确实是同一件事:短剧 App 跑出了一个大流量盘,免费看剧还…

📰

openrig 配置管理 Claude Code 与 Codex 的 AI 编程助手代理转发实践

1. openrig 到底是个什么东西第一次看到 openrig 这个名字,我下意识以为是某个硬件外设或者开源机械臂项目,毕竟 "rig" 这个词在工程领域通常指代设备支架、测试台架或者整套装置。但结合热搜词里那一串 Claude Code、Codex、YAML、Node.js 来…

📰

基于Python的网络舆情分析系统实战:从爬虫采集到情感可视化全流程

简介:这是一套面向高校人工智能课程设计与期末大作业的基于Python的网络舆情分析系统完整项目,涵盖源码、全部数据与文档说明。项目已调试可运行,无需修改即可直接用于答辩或提交,适合需要快速获得高质量完成方案的学生。压缩包共…

📰

随机森林特征选择与降维实战:重要性排序、Python实现与避坑指南

做特征筛选的时候,我见过太多人一上来就咔咔跑相关性矩阵、PCA、LASSO,绕一大圈,最后发现两个问题:一是筛选出的特征换个模型就不灵了,二是根本解释不了为什么选这几个。后来我发现,随机森林在这件事上天然…

📰

pigeon_generator 鸿蒙适配实战:Flutter 插件桥接层设计与迁移指南

从把 Flutter 插件往鸿蒙上迁移的那一周开始,我几乎每天都在跟桥接代码较劲。真正让我停下来重新想了三天的,就是 pigeon_generator——准确说,是“pigeon_generator 生成的桥接代码,到底能不能在鸿蒙上用”这件事。如果你也在做 …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬