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/) - 运行时执行引擎