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
241 lines
7.0 KiB
Markdown
241 lines
7.0 KiB
Markdown
# 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/) - 运行时执行引擎
|