README_zh.md
1 # Docker OSSFS 挂载示例 2 3 本示例演示如何使用新版 SDK 的 `ossfs` volume 模型,在 Docker 运行时将阿里云 OSS 挂载到沙箱容器。 4 5 ## 覆盖场景 6 7 1. **基础读写挂载**(OSSFS backend)。 8 2. **跨沙箱共享数据**(同一 OSSFS backend path)。 9 3. **通过 `subPath` 挂载不同 OSS prefix**。 10 11 ## 前置条件 12 13 ### 1) 启动 OpenSandbox 服务(Docker runtime) 14 15 请确保服务端主机满足: 16 17 - Linux 主机系统(OpenSandbox Server 运行在 Windows 时不支持 OSSFS backend) 18 - 已安装 `ossfs` 19 - 已启用 FUSE 20 - 已有可写的 OSSFS 本地挂载根目录(默认 `storage.ossfs_mount_root=/mnt/ossfs`) 21 22 `storage.ossfs_mount_root` 是**可选配置**(使用默认值时可不写)。 23 即使是按需动态挂载,运行时仍需要一个确定的宿主机根目录来放置挂载点: 24 `<mount_root>/<bucket>/<subPath?>`。 25 26 可选配置示例: 27 28 ```toml 29 [runtime] 30 type = "docker" 31 32 [storage] 33 ossfs_mount_root = "/mnt/ossfs" 34 ``` 35 36 启动服务: 37 38 ```bash 39 opensandbox-server 40 ``` 41 42 ### 2) 安装 Python SDK 43 44 ```bash 45 uv pip install opensandbox 46 ``` 47 48 如果当前 PyPI 版本还不包含 OSSFS 相关模型,可从源码安装: 49 50 ```bash 51 pip install -e sdks/sandbox/python 52 ``` 53 54 ### 3) 配置 OSS 参数 55 56 ```bash 57 export SANDBOX_DOMAIN=localhost:8080 58 export SANDBOX_API_KEY=your-api-key 59 export SANDBOX_IMAGE=ubuntu 60 61 export OSS_BUCKET=your-bucket 62 export OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com 63 export OSS_ACCESS_KEY_ID=your-ak 64 export OSS_ACCESS_KEY_SECRET=your-sk 65 ``` 66 67 ## 运行 68 69 ```bash 70 uv run python examples/docker-ossfs-volume-mount/main.py 71 ``` 72 73 ## SDK 最小示例 74 75 ```python 76 from opensandbox import Sandbox 77 from opensandbox.models.sandboxes import OSSFS, Volume 78 79 sandbox = await Sandbox.create( 80 image="ubuntu", 81 volumes=[ 82 Volume( 83 name="oss-data", 84 ossfs=OSSFS( 85 bucket="your-bucket", 86 endpoint="oss-cn-hangzhou.aliyuncs.com", 87 # version="2.0", # 可选,默认 "2.0" 88 accessKeyId="your-ak", 89 accessKeySecret="your-sk", 90 ), 91 mountPath="/mnt/data", 92 subPath="train", # 可选 93 readOnly=False, # 可选 94 ) 95 ], 96 ) 97 ``` 98 99 ## 说明 100 101 - 当前实现仅支持**内联凭据**(`accessKeyId` / `accessKeySecret`)。 102 - Docker 运行时采用**按需挂载**(mount-or-reuse),不是预挂载所有 bucket。 103 - API/SDK 中 `ossfs.version` 字段存在,枚举为 `"1.0"` / `"2.0"`,省略时默认 `"2.0"`。 104 - Docker 运行时已按 `version` 区分挂载参数编码: 105 - `1.0`:通过 `ossfs ... -o <option>` 挂载。 106 - `2.0`:通过 `ossfs2 mount ... -c <config-file>` 挂载,`options` 以 `--<option>` 配置项写入配置文件。 107 - `options` 必须是**不带前缀 `-` 的原始参数值**(例如:`allow_other`、`umask=0022`)。 108 109 ## 参考 110 111 - [OSEP-0003: Volume 与 VolumeBinding 支持](../../oseps/0003-volume-and-volumebinding-support.md) 112 - [Sandbox Lifecycle API 规范](../../specs/sandbox-lifecycle.yml)