kernel-images
AI Web Agent 的沙箱浏览器底座,支持 CDP 协议和 WebRTC 实时视频流
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
AI Web Agent 的沙箱浏览器底座,支持 CDP 协议和 WebRTC 实时视频流
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你正在调试一个网页数据采集脚本。脚本在本地运行正常,但一部署到服务器就因为反爬机制被封 IP。换成无头浏览器后,Chrome 进程又在 Docker 里不断崩溃,内存占用居高不下。更棘手的是——你的 AI Agent 需要实时"看到"浏览器正在做什么,但现有的 Selenium Grid 延迟太高,调试全靠猜。
这正是 Kernel 要解决的问题。
Kernel(kernel/kernel-images,Apache-2.0,938★)是一个开源的浏览器即服务(Browsers-as-a-Service)平台,专门为自动化工具和 AI Web Agent 提供隔离、可控的 Chrome 浏览器环境。项目由 @juecd__ 和 @rfgarcia 两位独立开发者维护,官方托管平台为 kernel.sh。
项目诞生于 2024 年,核心驱动力是当时市面上的浏览器自动化方案存在几个痛点:
Kernel 采用 Docker + Unikraft Unikernel 双轨部署架构,整体分为三层:
项目核心用 Go 1.25 编写,后端通过 Go-Chi 路由框架提供 REST + WebSocket 接口,API 规范用 OpenAPI 描述(openapi.yaml)。关键依赖包括:
| 依赖 | 用途 |
|---|---|
docker/docker v28 | 容器生命周期管理 |
coder/websocket v1.8 | WebSocket 实时通信 |
m1k1o/neko/server | WebRTC 视频流媒体服务 |
glebarez/sqlite | 本地会话状态持久化 |
s2-streamstore/s2-sdk | 录屏文件云存储 |
API 端点通过 cmd/api 编译为独立二进制 kernel-images-api,chromium-launcher 则负责启动和管理 Chrome 进程。
WebRTC 远程 GUI 部分使用 Node.js 22 构建,Vite 打包后嵌入 Docker 镜像,提供 noVNC 和 WebRTC 两种远程访问模式。Dockerfile 中用 node:22-bullseye-slim 多阶段构建,npm install + npm run build 流程完整。
容器内运行完整的 X11 桌面栈(xorg-deps 阶段安装 mesa、 Mutter 等组件),Supervisor 管理多个进程:Chrome 主进程、xrdp/VNC、WebRTC 流媒体。
项目提供了两套构建脚本:
Docker 路线(推荐):
cd images/chromium-headful
IMAGE=kernel-docker ./build-docker.sh
IMAGE=kernel-docker ENABLE_WEBRTC=true ./run-docker.sh
多阶段 Dockerfile 构建出 server + client + xorg-deps 三个阶段,最终镜像基于 ubuntu:22.04,占用约 5GB,支持 amd64/arm64 双架构(BuildKit --platform 参数)。
Unikraft Unikernel 路线:
curl -sSfL https://get.kraftkit.sh | sh
export UKC_METRO=<region>
export UKC_TOKEN=<your-token>
IMAGE=YOUR_USERNAME/chromium-headless:latest images/chromium-headless/build-unikernel.sh
unikernel 路线提供两项 Docker 无法实现的能力:空闲时自动进入"睡眠模式"(零资源占用)和 20ms 内冷启动。代价是需要至少 8GB 内存,部署到 Unikraft Cloud 后 URL 公开可访问(用于非敏感场景)。
Chrome DevTools Protocol 连接方式:
// 1. 获取 WebSocket 端点
const { webSocketDebuggerUrl } = await fetch("http://localhost:9222/json/version").then(r => r.json());
// 2. Puppeteer 连接
const browser = await puppeteer.connect({ browserWSEndpoint: webSocketDebuggerUrl });
// 3. Playwright 连接
const browser = await chromium.connectOverCDP(webSocketDebuggerUrl);
端口 9222 通过 ncat 暴露,WebSocket 路径随每次启动变化,支持断开重连(browser.close() 仅关闭 WebSocket,不关闭实际 Chrome 进程)。
作为 AI Agent 的"眼睛",Kernel 可与主流框架无缝对接:
Agent 可以在远程浏览器中执行点击、输入、截图等操作,同时通过 WebRTC 实时视频流"看到"浏览器画面,调试体验接近本地运行。
内置录制服务器(需启用 WITH_KERNEL_IMAGES_API=true),支持录屏采集并输出为 H.264/MP4 文件:
curl http://localhost:10001/recording/start -d {}
# 执行 Agent 任务...
curl http://localhost:10001/recording/stop -d {}
curl http://localhost:10001/recording/download --output session.mp4
注意:QuickTime 播放器对 H.264 兼容有问题,建议使用 VLC 等播放器。
| 维度 | 结论 |
|---|---|
| 部署难度 | 中等,需 Docker 基础 |
| 预估时间 | 15 分钟(构建 + 首次拉取镜像) |
| 硬件需求 | 8GB RAM,5GB 磁盘,无需 GPU |
| 容器化 | ✅ 完整多阶段 Dockerfile |
| Web UI | ✅ WebRTC + noVNC 双重访问 |
| 快速部署 | ✅ build-docker.sh + run-docker.sh 一键 |
Browser-as-a-Service 赛道正在快速增长。随着 Web Agent(用于网页浏览、信息提取、自动化填表的 AI Agent)成为 LLM 应用的重要方向,对可靠浏览器环境的需求急剧上升。Kernel 的差异化在于:

图1:Kernel 仓库 OpenGraph 封面图
图2:Kernel 项目组织头像