前言
我在 🦞安卓党的AI突围:Oracle 24G+4 VPS 部署 OpenClaw 深度指南 (2026版) | Luznest (光巢) 这篇文章里介绍用docker的方式部署OpenClaw。Docker能把能力强大,破坏力也同样强大的OpenClaw限制在沙盒环境,不会在电脑上造成不可挽回的损失。

但是这种沙盒环境限制也不是没有代价。官方镜像为了体积和通用性,不得不阉割掉笨重的浏览器内核和数据库等系列工具。使用Docker方式部署OpenClaw处理各种事情时,我常常经历那种“明明差临门一脚,它却卡在环境限制上”的挫败感。
比如说,本想让它去读一篇微信公众号文章解析,它却对着反爬 JS 报错;本想让它帮你整理过去一年的健康数据,它却只能在几千行的 Markdown 文件里左右支绌。你想让它帮你分析最近Anki刷卡记录,它却告诉你只能读文本文档。
这种时候,你就会意识到:官方原生镜像只是一个基础的毛坯房。 我们要的是一个能干脏活、能处理复杂任务的“完全体”。所以,我们要给它打个“补丁”——这不是在改代码,而是在给 AI 的灵魂,重新焊接一副更强壮的肉身。
为什么要费这个劲?关于“视力”与“仓库”的隐喻
在动手之前,我们得先搞清楚,我们到底在补什么。
第一,是加装“视力”。 现在的网页很少有静态页面。微信、小红书,它们全是靠 JavaScript 动态生成的。如果你只给 AI 提供一个 curl(就像是给它一根导盲棍),它只能在黑暗里摸索。 我们要装的 Playwright 和 Chromium,就是给 AI 装上一对实实在在的“数字化眼睛”。它能真正打开浏览器,等广告弹窗消失,等内容渲染完成,甚至能模拟你的手指去点击。
第二,是建立“仓库”。 Markdown 是很好的笔记格式,但它不是好的数据引擎。当你试图把上万行的 Garmin 手表睡眠记录塞给 AI 时,它的 Token 窗口会瞬间被垃圾信息填满。 我们要装的 sqlite3,就是给 AI 建一个地下仓库。数据不再是无序流动的文字,而是结构化的、可索引的表格。AI 查数据不再靠“读”,而是靠“检”。
更深一层的意义在于:很多硬核工具的底层,其实都是 SQLite。 比如你每天背的 Anki 牌组,它的学习进度和遗忘曲线就躺在 .anki2 数据库里。有了这个工具,AI 就能直接读取你的知识库,知道你哪些单词还没记牢,从而在对话中精准地为你进行“主动回想(Active Recall)”。这种从生理数据到认知数据的全面建模,才是真正让 AI “认识”你的开始。
第三,是通往“三上编程”的门票。 我之前提过“三上编程”(车上、路上、厕上)。要实现这种丝滑的自动化,你的 Agent 必须在服务器后台能够自主完成文件同步(rclone)。我们需要它把沙盒环境里写的文件自动共享到沙盒环境外,也就我们的电脑本地,却又不破坏安全限制。
这套组合拳,才是通往 Vibe Coding 自由的关键。
动手:在 Docker 镜像之上“盖楼”
我们采用的是 Docker 的“层叠”策略。这是一种优雅的折腾方式:你不需要碰 OpenClaw 的源码,只需以它为基石,盖上我们自己的功能层。
第一步:环境的“骨龄检测”
在 VPS 的终端里,先确认一下官方OpenClaw镜像的底子。这一步决定了我们后面装包的策略。
docker run --rm -it ghcr.io/openclaw/openclaw:latest sh -lc 'cat /etc/os-release'
大部分情况下,你会看到 Debian 12 (bookworm)。这意味着我们的 apt 命令会有坚实的支撑。
第二步:编写那个“焊工手册”(Dockerfile)
在 /opt/openclaw 目录下,我们要准备一个 Dockerfile。这不仅仅是几行命令,这是我们踩过无数坑之后沉淀下来的“最佳实践”。
cd /opt/openclaw
# 将以下内容写入Dockerfile
cat > Dockerfile <<'EOF'
FROM ghcr.io/openclaw/openclaw:latest
USER root
# 1) 系统工具 + 浏览器运行依赖 + chromium + 常用字体
RUN apt-get update && apt-get install -y --no-install-recommends \
sqlite3 \
rclone \
ca-certificates \
chromium \
libnss3 libnspr4 \
libatk1.0-0 libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 \
libgbm1 \
libpango-1.0-0 libcairo2 \
libasound2 \
fonts-noto-cjk fonts-noto-color-emoji \
&& rm -rf /var/lib/apt/lists/*
# 2) 固定 Playwright 版本,并把浏览器缓存写入镜像层
ARG PLAYWRIGHT_VERSION=1.50.1
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
ENV CHROME_PATH=/usr/bin/chromium
WORKDIR /app
# 如果 /app 没有 package.json,补一个最小的
RUN test -f package.json || (printf '{\n "name": "openclaw-app",\n "private": true\n}\n' > package.json)
# 3) 关键:不用 npm 安装 Playwright(会触发 npm 的奇怪报错),改用 pnpm
# 4) 关键:/app 在这个镜像里被当成 workspace root,所以 pnpm add 需要加 -w
RUN corepack enable \
&& corepack prepare pnpm@9.15.3 --activate \
&& pnpm add -Dw -w playwright@${PLAYWRIGHT_VERSION} \
&& pnpm exec playwright install chromium \
&& pnpm exec playwright install-deps chromium
USER node
EOF
构建镜像
在 Dockerfile 所在目录直接 build镜像:
cd /opt/openclaw
docker build -t openclaw-patched:latest .
自测(必须做)
构建完成后,先用一个最小脚本验证这四件事:
架构是否为 arm64(或你的目标架构)
系统 chromium 是否存在
Node 能否
require("playwright")Playwright 能否启动浏览器并访问网页
docker run --rm -it openclaw-patched:latest sh -lc '
node -p "process.arch"
which chromium || which chromium-browser || true
node - << "NODE"
const { chromium } = require("playwright");
(async () => {
const b = await chromium.launch({ headless: true, args: ["--no-sandbox"] });
const p = await b.newPage();
await p.goto("https://example.com", { waitUntil: "domcontentloaded" });
console.log("title=", await p.title());
await b.close();
})();
NODE
'
预期输出中应该包含:
arm64(或你的架构)/usr/bin/chromium(或对应路径)title= Example Domain
只要这一步通过,说明镜像层面已经完全 OK。
用新镜像运行 OpenClaw
在 docker-compose.yml 里把原镜像改成 openclaw-patched:latest
services:
openclaw:
build: .
image: openclaw-patched:latest
container_name: openclaw
restart: always
env_file: .env
volumes:
- ./data:/home/node/.openclaw
然后重启OpenClaw:
docker compose down
docker compose up -d
查看OpenClaw的日志输出
docker compose logs -f
验证:当 AI 第一次睁开眼
当你编译完新镜像并启动后,那种感觉是非常奇妙的。 你可以发一篇微信公众号给OpenClaw。
当你在对话里看到它成功输出网页标题,甚至能截图返回给你时,你会意识到,它不再是那个只能听你说话的盒子了。它现在拥有了独立获取信息、独立处理数据的完整能力。

日常我们只能让腾讯元宝阅读公众号文章,但是那个模型不怎么理想。上图左边是OpenClaw读取的微信公众号文章。它正确抓取到内容,并给出详细总结。右边是Gemini,同样的链接,它先是编了一个摘要,被戳穿后只好承认自己无法查看公众号文章。打完补丁后的这个OpenClaw从此可以帮我深度阅读微信公众号,甚至有可能可以帮我抢个春运车票!
结语:折腾的本质是“掌控”
我们为什么要花几个小时去折腾这几百兆的镜像补丁?
是因为我们不满足于做一个“工具的搬运工”。当你的 Agent 拥有了 sqlite3 的结构化记忆,拥有了 Playwright 的广阔视野,拥有了 rclone 的流动能力,它才真正开始成为你数字生命的延伸。
如果你在复现过程中遇到了新的报错,欢迎在评论区留言。