/ sandboxes / code-interpreter / README_zh.md
README_zh.md
  1  # OpenSandbox Code Interpreter 环境
  2  
  3  中文 | [English](README.md)
  4  
  5  这个目录包含了 Code Interpreter 沙箱的 Docker 构建文件。该镜像基于 `Ubuntu 24.04`
  6  ,并预装了多种主流编程语言及其多版本环境,旨在提供一个开箱即用的多语言代码执行环境。
  7  
  8  ## 特性
  9  
 10  - **多语言支持**:预装 Python、Java、Node.js 和 Go 及其多个版本
 11  - **版本切换**:无需重新构建,支持运行时快速切换版本
 12  - **Jupyter 集成**:内置 Jupyter Notebook 并支持多语言内核
 13  - **多架构支持**:同时支持 amd64 和 arm64 架构
 14  - **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`。
 15  - **生产就绪**:针对容器化执行环境进行了优化
 16  
 17  ## 支持的语言与版本
 18  
 19  镜像内预置了以下语言和版本:
 20  
 21  | 语言          | 支持版本                          | 安装路径                   | 备注                     |
 22  |:------------|:------------------------------|:-----------------------|:-----------------------|
 23  | **Python**  | 3.10, 3.11, 3.12, 3.13, 3.14* | `/opt/python/versions` | 使用 `uv` 安装;3.14 为实验性版本 |
 24  | **Java**    | 8, 11, 17, 21                 | `/usr/lib/jvm`         | OpenJDK; 含 Maven 3.9.2 |
 25  | **Node.js** | v18, v20, v22                 | `/opt/node`            | 官方 Linux 二进制包          |
 26  | **Go**      | 1.23, 1.24, 1.25              | `/opt/go`              | 官方 Linux 二进制包          |
 27  
 28  *> 注意: 版本号可能会随构建时间更新至小版本的最新版。*
 29  
 30  ## 快速开始
 31  
 32  ### 1. 构建镜像
 33  
 34  由于支持多架构(amd64/arm64),建议使用 Docker Buildx 构建:
 35  
 36  ```bash
 37  # 进入目录
 38  cd sandboxes/code-interpreter
 39  
 40  # 构建本地镜像
 41  docker build -t sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest .
 42  
 43  # 多架构构建(需要 Docker Buildx)
 44  docker buildx build --platform linux/amd64,linux/arm64 \
 45    -t sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest .
 46  ```
 47  
 48  ### 2. 运行容器
 49  
 50  **指定自定义版本:**
 51  
 52  ```bash
 53  docker run -it --rm \
 54    -e PYTHON_VERSION=3.11 \
 55    -e JAVA_VERSION=17 \
 56    -e NODE_VERSION=20 \
 57    -e GO_VERSION=1.24 \
 58    sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest
 59  ```
 60  
 61  ### `EXECD_CLONE3_COMPAT`(clone3-workaround)
 62  
 63  若将 `EXECD_CLONE3_COMPAT` 设为 `1`、`true`、`yes`、`on` 或 `reexec`(与 [execd](../../components/execd/README_zh.md#沙箱内的-linux-clone3-兼容) 一致),入口脚本会在启动 Jupyter/内核前用 **`/usr/local/bin/clone3-workaround` 重新 `exec` 自身**。**linux/amd64** 镜像内含该二进制;**arm64** 构建会打印警告并跳过包装。包装成功后脚本会在当前进程树中 **`unset` `EXECD_CLONE3_COMPAT`**。设为 `0`、`false`、`off`、`no` 或不设置则关闭此逻辑。
 64  
 65  ## 如何切换版本
 66  
 67  镜像内置了一个环境切换脚本 `/opt/opensandbox/code-interpreter-env.sh`,你需要使用 `source` 命令加载它来修改当前 Shell
 68  的环境变量。
 69  
 70  ### 基本用法
 71  
 72  ```bash
 73  source /opt/opensandbox/code-interpreter-env.sh <language> <version>
 74  ```
 75  
 76  ### 示例
 77  
 78  **切换 Python 版本:**
 79  
 80  ```bash
 81  # 切换到 Python 3.11
 82  source /opt/opensandbox/code-interpreter-env.sh python 3.11
 83  python3 --version
 84  # Output: Python 3.11.x
 85  ```
 86  
 87  **切换 Java 版本:**
 88  
 89  ```bash
 90  # 切换到 Java 8
 91  source /opt/opensandbox/code-interpreter-env.sh java 8
 92  java -version
 93  ```
 94  
 95  **切换 Node.js 版本:**
 96  
 97  ```bash
 98  # 切换到 Node 22
 99  source /opt/opensandbox/code-interpreter-env.sh node 22
100  node -v
101  ```
102  
103  **切换 Go 版本:**
104  
105  ```bash
106  # 切换到 Go 1.25
107  source /opt/opensandbox/code-interpreter-env.sh go 1.25
108  go version
109  ```
110  
111  ### 查看可用版本
112  
113  如果不指定版本号,脚本会列出当前镜像内已安装的可用版本:
114  
115  ```bash
116  # 查看所有 Python 版本
117  source /opt/opensandbox/code-interpreter-env.sh python
118  
119  # 查看所有 Java 版本
120  source /opt/opensandbox/code-interpreter-env.sh java
121  
122  # 查看所有 Node.js 版本
123  source /opt/opensandbox/code-interpreter-env.sh node
124  
125  # 查看所有 Go 版本
126  source /opt/opensandbox/code-interpreter-env.sh go
127  ```
128  
129  ## 默认版本
130  
131  容器启动时的默认版本配置如下:
132  
133  - **Python**: 3.14
134  - **Java**: 21
135  - **Node.js**: 22
136  - **Go**: 1.25
137  
138  如需在 Dockerfile 层面永久修改默认版本,请调整 Dockerfile 底部的 `ENV PATH` 设置。
139  
140  ## Jupyter Notebook 集成
141  
142  ### 可用内核
143  
144  镜像预装了所有支持语言的 Jupyter 内核:
145  
146  - **Python**:所有 Python 版本的 ipykernel
147  - **Java**:IJava 内核
148  - **TypeScript/JavaScript**:tslab 内核
149  - **Go**:gonb 内核
150  - **Bash**:bash_kernel
151  
152  ### 启动 Jupyter
153  
154  ```bash
155  /opt/opensandbox/code-interpreter.sh
156  ```
157  
158  ### 环境变量
159  
160  - `JUPYTER_HOST`:Jupyter 服务器地址(默认:`http://127.0.0.1:44771`)
161  - `JUPYTER_PORT`:Jupyter 服务器端口(默认:`44771`)
162  - `JUPYTER_TOKEN`:访问令牌(默认:`opensandboxcodeinterpreterjupyter`)
163  
164  ## 高级用法
165  
166  ### 持久化工作空间
167  
168  挂载本地目录以持久化您的工作:
169  
170  ```bash
171  docker run -it --rm \
172    -v $(pwd)/workspace:/workspace \
173    sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest
174  ```
175  
176  ### 自定义配置
177  
178  覆盖 Jupyter 配置:
179  
180  ```bash
181  docker run -it --rm \
182    -v $(pwd)/jupyter_config.py:/root/.jupyter/jupyter_notebook_config.py \
183    sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:latest
184  ```
185  
186  ### 安装额外的包
187  
188  **Python:**
189  
190  ```bash
191  python3 -m pip install pandas numpy --break-system-packages
192  ```
193  
194  **Node.js:**
195  
196  ```bash
197  npm install -g typescript
198  ```
199  
200  **Go:**
201  
202  ```bash
203  go install github.com/user/package@latest
204  ```
205  
206  **Java:**
207  
208  ```bash
209  mvn install dependency:copy-dependencies
210  ```
211  
212  ## 架构说明
213  
214  ```
215  code-interpreter/
216  ├── Dockerfile                          # 镜像Dockerfile
217  ├── Dockerfile_base                     # 基础镜像Dockerfile
218  ├── README.md                           # 英文文档
219  ├── README_zh.md                        # 本文件
220  └── scripts/
221      ├── code-interpreter-env.sh         # 版本切换脚本
222      ├── code-interpreter.sh             # Jupyter 启动脚本
223      └── jupyter_notebook_config.py      # Jupyter 配置文件
224  ```
225  
226  ## 许可证
227  
228  此项目是 OpenSandbox 套件的一部分。详情请参阅主 [LICENSE](../../LICENSE) 文件。
229  
230  ## 支持
231  
232  问题和疑问:
233  
234  - GitHub Issues: [OpenSandbox Issues](https://github.com/alibaba/OpenSandbox/issues)
235  
236  ## 相关项目
237  
238  - [OpenSandbox](../../) - 主项目
239  - [Server](../../server/) - 服务器实现
240  - [Execd](../../components/execd/) - 运行时执行引擎