使用1panel为OpenClaw部署专属浏览器
OpenClaw 合集 | 为 OpenClaw 部署专属浏览器
本文是 OpenClaw 使用合集的其中一篇,记录如何在 1Panel 环境下,为 OpenClaw 部署一个可远程控制的 Chromium 浏览器容器。
为什么需要单独部署浏览器?
在实际使用 OpenClaw 的过程中,”让 AI Agent 上网”这件事远比想象中麻烦。常见的几种思路都存在明显缺陷:
方案一:服务器安装桌面环境 + Chrome
资源消耗高,且一个桌面通常只能稳定运行一个 Chrome 实例,难以同时支撑多个 Agent。
方案二:容器内运行无头 Chrome(Headless)
每次重建容器都需要重新安装浏览器,数据无法持久化,无法登录账号,也无法处理人机验证(CAPTCHA)。
方案三:使用 browserless
初期体验尚可,但很容易被人机验证拦截,连 Google 搜索都可能触发验证,需要手动干预,操作成本较高。
经过一番对比,最终选定 lscr.io/linuxserver/chromium 作为解决方案。它将 Chromium 浏览器封装在容器中,通过 Web UI 可以直接在浏览器里操作浏览器,支持持久化配置、账号登录与 Cookie 保留,同时可通过 CDP(Chrome DevTools Protocol)对外提供远程控制接口。
技术背景:为什么需要 socat?
Chromium 的 CDP 接口默认只监听本地回环地址 127.0.0.1,容器外部无法直接访问。因此需要借助 alpine/socat 容器将端口转发出来,使 OpenClaw 能够通过局域网 IP 连接到浏览器。
此外需要特别注意:如果 openclaw.json 中的 cdpUrl 填写的是回环地址(如 localhost 或 127.0.0.1),OpenClaw 会误判为需要在本地启动浏览器,而不是连接外部实例。因此 cdpUrl 必须填写服务器的局域网 IP 地址。
部署步骤
第一步:启动 Chromium 容器
以下两条命令分别启动 Chromium 容器和 socat 转发容器。在 1Panel 中,容器需要加入 1panel-network 网络,以便与 OpenClaw 容器互通。
1 | docker run -d \ |
1 | docker run -d \ |
几点说明:
3011:3001将 Web UI 映射到宿主机的3011端口,可按需修改以避免端口冲突。9224:9223用于暴露经 socat 转发后的 CDP 接口。- socat 容器使用
--network container:chromium_openclaw,与 Chromium 容器共享同一网络命名空间,这是 CDP 转发能够工作的关键。 ./data:/config用于持久化浏览器配置与用户数据,重建容器后数据不丢失。
第二步:在浏览器中完成初始配置
容器启动后,通过浏览器访问:
1 | http://服务器IP:3011 |
此时可以直接在 Web UI 中操作 Chromium,建议在此阶段完成以下准备工作:
- 登录需要用到的网站账号
- 处理首次访问时可能出现的人机验证
- 确认浏览器运行正常
第三步:配置 OpenClaw
编辑 OpenClaw 的配置文件 openclaw.json,添加以下 browser 配置段:
1 | { |
将 cdpUrl 中的 服务器IP 替换为实际的chromium_openclaw容器分配 IP 地址(例如 172.18.0.45)。再次强调,这里不能使用 localhost 或 127.0.0.1。
验证是否成功
配置完成并重启 OpenClaw 后,可以让 Agent 执行一个简单的网页访问任务,观察它是否能正确使用已部署的 Chromium 实例。如果浏览器 Web UI 中能看到 Agent 的操作行为,说明配置已经生效。
小结
整个方案的核心逻辑是:用 linuxserver/chromium 提供一个可持久化、可交互的浏览器环境,用 socat 解决 CDP 端口的网络可达性问题,最后通过局域网 IP 将浏览器实例挂载到 OpenClaw。这套组合在 1Panel 环境下运行稳定,也便于后续扩展为多浏览器实例、服务多个 Agent 的场景。
