news 2026/9/14 7:41:15

OpenSandbox 实战指南:在 AI Agent 沙箱中启动 code-server 实现浏览器端 VS Code 访问

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenSandbox 实战指南:在 AI Agent 沙箱中启动 code-server 实现浏览器端 VS Code 访问

OpenSandbox 实战指南:在 AI Agent 沙箱中启动 code-server 实现浏览器端 VS Code 访问

【免费下载链接】OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandbox

本文基于 OpenSandbox 官方示例文档docs/examples/vscode.md编写,讲解如何在 OpenSandbox 中构建并运行一个预装 code-server(VS Code Web)的沙箱镜像,通过几行 Python SDK 代码把一套完整的浏览器端 IDE 能力注入 AI Agent 的执行环境。读完本文,你将掌握:VS Code 沙箱镜像的构建方式、本地 OpenSandbox server 的启动流程、main.py示例脚本中各环境变量的含义,以及Sandbox.createcommands.runget_endpoint三个核心 SDK API 的底层实现链路,最终得到一个可以通过浏览器直接访问的沙箱内 VS Code 实例。

示例定位:为什么要在沙箱里跑 VS Code

OpenSandbox 是一个面向 AI Agent 的运行时沙箱系统。Agent 在执行代码、操作文件、调试程序时往往需要一个完整的开发环境。examples/vscode示例给出的方案是:在沙箱容器内运行 code-server(VS Code 的官方 Web 版本),通过 OpenSandbox 的端口端点机制对外暴露 HTTP 服务,使用户无需在本机安装任何 VS Code 组件,直接用浏览器即可获得一个隔离在沙箱内的工作区 IDE。

这一方案的价值在于:Agent 与开发者共享同一个隔离环境,且该环境的文件系统、网络出口都被 OpenSandbox 管控,IDE 本身也成为 Agent 可操控的对象。

构建 VS Code 沙箱镜像

示例目录examples/vscode下提供了完整的 Dockerfile,构建命令为:

cd examples/vscode docker build -t opensandbox/vscode:latest .

从 Dockerfile 源码看,镜像的构建逻辑分为四层关键步骤:

  1. 基础镜像:基于debian:12-slim,并通过一条apt-get语句一次性安装python3python3-pipcurlca-certificates,随后清理 apt 缓存以控制层体积;
  2. 安装 code-server:直接调用官方安装脚本curl -fsSL https://code-server.dev/install.sh | sh,这是 code-server 官方推荐的安装方式;
  3. 非 root 用户:创建系统组与用户vscode,并建立/home/vscode与工作目录/workspace,两者均chown给该用户——这是官方文档强调的“Non-root user for security”设计;
  4. 运行身份与工作区WORKDIR /workspace指定容器工作目录,USER vscode切换为非特权用户,默认命令为bash

官方文档说明该镜像包含三个特性:预装 code-server、非 root 用户vscode、工作区目录/workspace。构建完成后镜像标签为opensandbox/vscode:latest

启动本地 OpenSandbox Server

示例文档给出的是本地(Docker 运行时)部署路径。首先需要预拉取官方构建好的 VS Code 镜像(避免首次创建沙箱时现拉镜像):

docker pull sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/vscode:latest

随后通过 uv 安装 server 端并生成示例配置:

uv pip install opensandbox-server opensandbox-server init-config ~/.sandbox.toml --example docker opensandbox-server

三条命令分别完成:安装服务端包、以 docker 运行时模板生成~/.sandbox.toml配置文件、启动 OpenSandbox server(默认监听localhost:8080,与示例脚本的默认值一致)。配置文件本身的完整参数说明可参考 server/configuration.md。

运行 main.py:创建并访问 VS Code 沙箱

在安装了 SDK 的环境(仓库根目录即可,示例目录为examples/vscode)中执行:

# Install OpenSandbox package uv pip install opensandbox uv run python examples/vscode/main.py

可配置环境变量

阅读 main.py 源码,脚本支持以下环境变量覆盖默认值:

环境变量默认值作用
SANDBOX_DOMAINlocalhost:8080OpenSandbox server 地址
SANDBOX_API_KEY未设置连接 API Key,传给ConnectionConfig
SANDBOX_IMAGEopensandbox/vscode:latest创建沙箱使用的镜像
PYTHON_VERSION3.11注入容器的PYTHON_VERSION环境变量
CODE_PORT8443code-server 绑定的端口

脚本执行流程逐段解读

main.py的核心逻辑按顺序分为四步:

1. 建立连接配置并创建沙箱

config = ConnectionConfig( domain=domain, api_key=api_key, request_timeout=timedelta(seconds=60), ) sandbox = await Sandbox.create( image, connection_config=config, env=env, # 注入 {"PYTHON_VERSION": "3.11"} )

Sandbox.create是异步工厂方法,向 server 发起创建请求,env参数把PYTHON_VERSION注入到容器环境。ConnectionConfig中的request_timeout设为 60 秒,覆盖创建、执行命令等所有 HTTP 请求的超时。

2. 后台启动 code-server

start_exec = await sandbox.commands.run( f"code-server --bind-addr 0.0.0.0:{code_port} --auth none /workspace", opts=RunCommandOpts(background=True), )

命令含义:code-server 绑定0.0.0.0:8443--auth none关闭认证(因为访问控制由 OpenSandbox 的端点机制承担),打开/workspace作为根工作区。关键在RunCommandOpts(background=True)——命令以 detached 方式运行,commands.run不会阻塞等待 code-server 进程退出(它本来就不会退出),而是立即返回执行句柄,脚本随后用_print_logs打印启动日志的 stdout/stderr。

3. 获取可访问的端点

endpoint = await sandbox.get_endpoint(code_port) print(f" http://{endpoint.endpoint}/")

这是整个示例最核心的一步:不直接暴露容器端口,而是通过 OpenSandbox 的 endpoint 机制拿到对外访问地址。从 Python SDK 源码看,Sandbox.get_endpoint 会把请求委托给沙箱服务层,最终调用 SandboxesAdapter.get_sandbox_endpoint,后者请求 server 的get_sandboxes_sandbox_id_endpoints_port接口,并带有一个use_server_proxy开关——当连接配置启用了 server 代理时,端点地址会指向 server 侧的代理入口而非容器网络直连地址。Adapter 层还内置了按(sandbox_id, port, use_server_proxy)三元组缓存端点的逻辑,重复调用不会反复打到 server。

4. 保活与清理

await asyncio.sleep(600) # 沙箱保活 10 分钟 finally: await sandbox.kill()

脚本在async with sandbox:上下文中休眠 10 分钟让浏览器访问窗口保持打开,期间用户可直接在浏览器使用 IDE;Ctrl+C或到期后在finally中调用sandbox.kill()销毁沙箱,确保不会泄漏容器资源。

端点机制小结:安全边界在哪

示例中 code-server 特意使用--auth none,看似不安全,实际上访问控制被上移到了 OpenSandbox 的端点层:客户端必须先持有对 server 的有效连接(API Key、域名),才能通过get_endpoint(port)换取特定端口的访问地址;在 server 代理模式下,流量还要经过 server 侧转发。此外,沙箱内进程以非 root 用户vscode运行,工作区被限定在/workspace。这两层(非特权容器身份 + 端点代理)共同构成了浏览器 IDE 场景下的隔离边界。

延伸参考

  • 完整的沙箱创建、命令执行、端口暴露 API 详见 docs/sdks/python.md;
  • 端点安全访问(含签名端点get_signed_endpoint)的机制设计见 OSEP-0011 Secure Access Endpoint 与 docs/guides/secure-access.md;
  • 其他浏览器内 GUI 场景(noVNC 桌面)可对照 examples/desktop/README.md 中的 noVNC 方案,理解 OpenSandbox 端口端点机制在图形化负载上的通用性。

【免费下载链接】OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandbox

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 7:40:15

俄罗斯车牌检测实战:Haar级联与OpenCV调优

简介:一款已针对OpenCV 4.x优化过的Haar级联分类器模型,用于检测俄罗斯车辆的车牌,它借助Haar特征提取图像中的边缘、线条、角点等局部模式,再通过多级联分类器逐层筛选,以低误报率快速定位车牌区域。该模型经过了大量…

作者头像 李华
网站建设 2026/9/14 7:39:39

COMSOL激光熔覆与选区熔融仿真:从建模到收敛控制全攻略

做增材制造仿真这几年,被问最多的一个问题就是:“COMSOL到底能不能算激光熔覆和选区熔融?”我的答案一直是:能,而且很能,但前提是你得把物理模型搭对。很多人一上来就建一个特别精细的三维模型,…

作者头像 李华
网站建设 2026/9/14 7:38:14

代码80%是AI写的,这家AI公司呼吁暂停AI开发

Anthropic的代码库里,超过80%的代码是Claude自己写的。而这家AI公司最急迫的警告是:AI正在变得越来越不需要我们。 AI自己写AI的代码 一、谁在喊停?一个最不可能的刹车者 六月初,Anthropic发布署名文章《当AI构建自身》&#xff…

作者头像 李华
网站建设 2026/9/14 7:34:46

Python+Twilio搭建高效短信通知系统实战

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

作者头像 李华