Files
wehub-resource-sync e0e362d700
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
SDK Tests / SDK CI (push) Has been cancelled
SDK Tests / CLI Tests (push) Has been cancelled
SDK Tests / Python SDK Quality (code-interpreter) (push) Has been cancelled
SDK Tests / Python SDK Quality (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (sandbox) (push) Has been cancelled
SDK Tests / CLI Quality (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Go SDK Quality And Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

241 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenSandbox Code Interpreter 环境
中文 | [English](README.md)
这个目录包含了 Code Interpreter 沙箱的 Docker 构建文件。该镜像基于 `Ubuntu 24.04`
,并预装了多种主流编程语言及其多版本环境,旨在提供一个开箱即用的多语言代码执行环境。
## 特性
- **多语言支持**:预装 Python、Java、Node.js 和 Go 及其多个版本
- **版本切换**:无需重新构建,支持运行时快速切换版本
- **Jupyter 集成**:内置 Jupyter Notebook 并支持多语言内核
- **多架构支持**:同时支持 amd64 和 arm64 架构
- **clone3-workaround(仅 amd64**:在 **linux/amd64** 镜像中安装 [AkihiroSuda/clone3-workaround](https://github.com/AkihiroSuda/clone3-workaround) v1.0.0 至 `/usr/local/bin/clone3-workaround`(上游无 arm64 预编译包),并安装 **`libseccomp2`**(上游二进制动态链接 `libseccomp`)。在极旧 Docker/containerd 宿主机上可用其包裹命令,例如 `clone3-workaround apt-get update`
- **生产就绪**:针对容器化执行环境进行了优化
## 支持的语言与版本
镜像内预置了以下语言和版本:
| 语言 | 支持版本 | 安装路径 | 备注 |
|:------------|:------------------------------|:-----------------------|:-----------------------|
| **Python** | 3.10, 3.11, 3.12, 3.13, 3.14* | `/opt/python/versions` | 使用 `uv` 安装;3.14 为实验性版本 |
| **Java** | 8, 11, 17, 21 | `/usr/lib/jvm` | OpenJDK; 含 Maven 3.9.2 |
| **Node.js** | v18, v20, v22 | `/opt/node` | 官方 Linux 二进制包 |
| **Go** | 1.23, 1.24, 1.25 | `/opt/go` | 官方 Linux 二进制包 |
*> 注意: 版本号可能会随构建时间更新至小版本的最新版。*
## 快速开始
### 1. 构建镜像
由于支持多架构(amd64/arm64),建议使用 Docker Buildx 构建:
```bash
# 进入目录
cd sandboxes/code-interpreter
# 构建本地镜像
docker build -t sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest .
# 多架构构建(需要 Docker Buildx
docker buildx build --platform linux/amd64,linux/arm64 \
-t sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest .
```
### 2. 运行容器
**指定自定义版本:**
```bash
docker run -it --rm \
-e PYTHON_VERSION=3.11 \
-e JAVA_VERSION=17 \
-e NODE_VERSION=20 \
-e GO_VERSION=1.24 \
sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest
```
### `EXECD_CLONE3_COMPAT`clone3-workaround
若将 `EXECD_CLONE3_COMPAT` 设为 `1``true``yes``on``reexec`(与 [execd](../../components/execd/README.md#沙箱内的-linux-clone3-兼容) 一致),入口脚本会在启动 Jupyter/内核前用 **`/usr/local/bin/clone3-workaround` 重新 `exec` 自身**。**linux/amd64** 镜像内含该二进制;**arm64** 构建会打印警告并跳过包装。包装成功后脚本会在当前进程树中 **`unset` `EXECD_CLONE3_COMPAT`**。设为 `0``false``off``no` 或不设置则关闭此逻辑。
## 如何切换版本
镜像内置了一个环境切换脚本 `/opt/code-interpreter/code-interpreter-env.sh`,你需要使用 `source` 命令加载它来修改当前 Shell
的环境变量。
### 基本用法
```bash
source /opt/code-interpreter/code-interpreter-env.sh <language> <version>
```
### 示例
**切换 Python 版本:**
```bash
# 切换到 Python 3.11
source /opt/code-interpreter/code-interpreter-env.sh python 3.11
python3 --version
# Output: Python 3.11.x
```
**切换 Java 版本:**
```bash
# 切换到 Java 8
source /opt/code-interpreter/code-interpreter-env.sh java 8
java -version
```
**切换 Node.js 版本:**
```bash
# 切换到 Node 22
source /opt/code-interpreter/code-interpreter-env.sh node 22
node -v
```
**切换 Go 版本:**
```bash
# 切换到 Go 1.25
source /opt/code-interpreter/code-interpreter-env.sh go 1.25
go version
```
### 查看可用版本
如果不指定版本号,脚本会列出当前镜像内已安装的可用版本:
```bash
# 查看所有 Python 版本
source /opt/code-interpreter/code-interpreter-env.sh python
# 查看所有 Java 版本
source /opt/code-interpreter/code-interpreter-env.sh java
# 查看所有 Node.js 版本
source /opt/code-interpreter/code-interpreter-env.sh node
# 查看所有 Go 版本
source /opt/code-interpreter/code-interpreter-env.sh go
```
## 默认版本
容器启动时的默认版本配置如下:
- **Python**: 3.14
- **Java**: 21
- **Node.js**: 22
- **Go**: 1.25
如需在 Dockerfile 层面永久修改默认版本,请调整 Dockerfile 底部的 `ENV PATH` 设置。
## Jupyter Notebook 集成
### 可用内核
镜像预装了所有支持语言的 Jupyter 内核:
- **Python**:所有 Python 版本的 ipykernel
- **Java**IJava 内核
- **TypeScript/JavaScript**tslab 内核
- **Go**gonb 内核
- **Bash**bash_kernel
### 启动 Jupyter
```bash
/opt/code-interpreter/code-interpreter.sh
```
### 环境变量
- `JUPYTER_HOST`Jupyter 服务器地址(默认:`http://127.0.0.1:44771`
- `JUPYTER_PORT`Jupyter 服务器端口(默认:`44771`
- `JUPYTER_TOKEN`:访问令牌(默认:`opensandboxcodeinterpreterjupyter`
## 高级用法
### 持久化工作空间
挂载本地目录以持久化您的工作:
```bash
docker run -it --rm \
-v $(pwd)/workspace:/workspace \
sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest
```
### 自定义配置
覆盖 Jupyter 配置:
```bash
docker run -it --rm \
-v $(pwd)/jupyter_config.py:/root/.jupyter/jupyter_notebook_config.py \
sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest
```
### 安装额外的包
**Python**
```bash
python3 -m pip install pandas numpy --break-system-packages
```
**Node.js**
```bash
npm install -g typescript
```
**Go**
```bash
go install github.com/user/package@latest
```
**Java**
```bash
mvn install dependency:copy-dependencies
```
## 架构说明
```
code-interpreter/
├── Dockerfile # 镜像Dockerfile
├── Dockerfile_base # 基础镜像Dockerfile
├── README.md # 英文文档
├── README_zh.md # 本文件
└── scripts/
├── code-interpreter-env.sh # 版本切换脚本
├── code-interpreter.sh # Jupyter 启动脚本
└── jupyter_notebook_config.py # Jupyter 配置文件
```
## 许可证
此项目是 OpenSandbox 套件的一部分。详情请参阅主 [LICENSE](../../LICENSE) 文件。
## 支持
问题和疑问:
- GitHub Issues: [OpenSandbox Issues](https://github.com/opensandbox-group/OpenSandbox/issues)
## 相关项目
- [OpenSandbox](../../) - 主项目
- [Server](../../server/) - 服务器实现
- [Execd](../../components/execd/) - 运行时执行引擎