创建 Sandbox 时,可通过volume_mounts将已有 AgenticFS Volume 挂载到指定目录。
功能介绍
挂载后,Sandbox 可以通过文件路径访问 AgenticFS,数据不随 Sandbox 释放而删除。
如需向运行中的 Sandbox 追加挂载,请参见追加挂载 Volume。
适用范围
-
已为目标 Team 创建 AgenticFS Volume,并获取 Volume 名称。
-
已准备绑定同一 Team 的智能体沙箱 API Key。Volume 和 API Key 不能跨 Team 使用。具体操作,请参见创建 API Key。
-
已准备与 AgenticFS Access Point 网络连通的 VPC(Virtual Private Cloud,专有网络)、交换机和安全组。
-
已准备 RAM(Resource Access Management,访问控制)角色。该角色具备 AgenticFS 挂载和读写权限,且信任策略允许函数计算服务扮演。具体操作,请参见配置 RAM 角色。
-
已准备智能体沙箱 API URL、Domain 和可用模板。
注意:创建 Sandbox 前,必须确保对应的 AgenticFS Access Point 处于active状态,否则createSandbox调用可能超时或失败。可登录AgenticFS 控制台,找到对应的文件系统,进入详情页面,然后单击挂载使用查看 Access Point 状态。
创建 Sandbox 时使用的 VPC 配置必须包含 vpcId、securityGroupId 和非空的 vSwitchIds,且能够访问目标存储。模板中的 VPC 配置不能替代该挂载配置。
使用第二代运行时(MicroVM,微型虚拟机)自定义模板时,源镜像必须预装 AgenticFS 客户端。
操作步骤
步骤一:准备第二代运行时镜像
已有符合要求的模板,可直接进入步骤二:安装 SDK。
如果使用第二代运行时(MicroVM)的自定义模板,必须在构建模板前,在源镜像中预装 AgenticFS 客户端。当前 AgenticFS 安装包仅支持 linux/amd64。以下 Dockerfile 默认使用 Ubuntu 22.04,也可通过构建参数切换到 Debian 12:
ARG BASE_IMAGE=ubuntu:22.04
FROM ${BASE_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
ARG ALINAS_DEB_URL=https://aliyun-alinas-eac-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/aliyun-alinas-utils_2.4-0.20260908115139.ac23e3.amd64.deb
ARG ALINAS_DEB_SHA256=e0866d4a4a8b9fa7dbb3b0dea8ee086e7c8bfe3e79160a5e415935a86ec3367d
RUN set -eux; \
test -n "${ALINAS_DEB_URL}"; \
test -n "${ALINAS_DEB_SHA256}"; \
apt-get update; \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
nfs-common; \
curl -fL --retry 3 \
"${ALINAS_DEB_URL}" \
-o /tmp/aliyun-alinas-utils.deb; \
echo "${ALINAS_DEB_SHA256} /tmp/aliyun-alinas-utils.deb" \
| sha256sum -c -; \
apt-get install -y --no-install-recommends \
/tmp/aliyun-alinas-utils.deb; \
rm -f /tmp/aliyun-alinas-utils.deb; \
rm -rf /var/lib/apt/lists/*; \
command -v mount.alinas; \
command -v mount.nfs; \
mkdir -p /mnt/agenticfs
WORKDIR /root
# 不设置 USER、ENTRYPOINT 或 CMD,由 MicroVM 管控链路接管。
AgenticFS 基于 NFS(Network File System,网络文件系统)挂载,不需要安装 fuse3,也不依赖 /dev/fuse。请勿将 AccessKey、Token 等凭证写入 Dockerfile 或镜像层,必须在运行时安全注入。安装包升级时,必须同时更新 ALINAS_DEB_URL 和 ALINAS_DEB_SHA256,不要跳过 SHA-256 校验。
在 Dockerfile 所在目录构建 Ubuntu 22.04 镜像:
docker buildx build \
--platform linux/amd64 \
--load \
-t microsandbox-agenticfs:ubuntu22.04-alinas-utils-2.4 \
.
构建 Debian 12 镜像:
docker buildx build \
--platform linux/amd64 \
--build-arg BASE_IMAGE=debian:12-slim \
--load \
-t microsandbox-agenticfs:debian12-alinas-utils-2.4 \
.
--load 会将构建结果加载到本地 Docker。如果需要直接推送到镜像仓库,请先登录仓库,将 --load 替换为 --push,并将 -t 后的名称改为完整镜像地址。
构建完成后,分别验证镜像中的客户端和挂载目录:
Ubuntu 22.04
docker run --rm --platform linux/amd64 \
microsandbox-agenticfs:ubuntu22.04-alinas-utils-2.4 \
sh -euxc '
command -v mount.alinas
command -v mount.nfs
dpkg-query -W aliyun-alinas-utils nfs-common
test -d /mnt/agenticfs
'
Debian 12
docker run --rm --platform linux/amd64 \
microsandbox-agenticfs:debian12-alinas-utils-2.4 \
sh -euxc '
command -v mount.alinas
command -v mount.nfs
dpkg-query -W aliyun-alinas-utils nfs-common
test -d /mnt/agenticfs
'
以上命令全部成功,表示镜像中已正确安装 AgenticFS 客户端,但不代表 VPC、权限或真实挂载链路已经可用。
使用上述镜像创建第二代运行时(MicroVM)自定义模板后,在步骤三的挂载示例中将 E2B_TEMPLATE 设置为该模板的 ID 或别名。具体操作,请参见控制台管理自定义模板。
步骤二:安装 SDK
本文使用 E2B Python SDK 演示。volume_mounts 需要 E2B Python SDK 2.31.0 版本。
python3 -m venv .venv
source .venv/bin/activate
pip install "e2b==2.31.0"
步骤三:挂载并验证
环境变量说明
|
环境变量 |
用途 |
取值来源或填写方式 |
|
|
访问智能体沙箱的 API Key。 |
从智能体沙箱控制台获取,必须绑定 Volume 所属的 Team。 |
|
|
E2B API 请求地址。 |
填写 |
|
|
SDK 使用的服务域名。 |
填写 |
|
|
创建 Sandbox 使用的模板。 |
填写满足本文适用范围要求的可用模板 ID 或别名;可从智能体沙箱控制台获取。 |
|
|
要挂载的 AgenticFS Volume 名称。 |
使用创建 AgenticFS Volume中设置的名称,或从 Volume 列表查询;不使用 Volume ID。 |
挂载示例
在终端中设置以下参数,将占位符和示例值替换为实际值。各变量的取值参见本文环境变量说明。
export E2B_API_KEY="<YOUR-E2B-API-KEY>"
export E2B_API_URL="https://api.<REGION>.sandbox.aliyuncs.com"
export E2B_DOMAIN="<REGION>.sandbox.aliyuncs.com"
export E2B_TEMPLATE="code-interpreter-v1"
export AGENTICFS_VOLUME_NAME="agent-workspace"
本地挂载目录位于 Sandbox 内,对应 volume_mounts 的键。建议使用 /home、/mnt、/tmp 或 /data 的子目录,本文使用 /mnt/agenticfs。
以下示例复用 Volume 的 mountConfig.role 和 mountConfig.vpcConfig,将 AgenticFS Volume 挂载到 /mnt/agenticfs。请确保 Volume 已保存 RAM 角色和完整的 VPC 配置。角色选择规则参见配置 RAM 角色。
示例会在挂载目录中创建带随机标识的独立测试文件,写入并读取校验后删除该文件,再释放本次创建的 Sandbox。请使用具备读写权限的挂载配置。
将以下代码保存为 02_mount_agenticfs_volume.py:
import os
from uuid import uuid4
from e2b import Sandbox
def require_env(name: str) -> str:
value = os.environ.get(name, "").strip()
if not value:
raise RuntimeError(f"缺少环境变量: {name}")
return value
mount_dir = "/mnt/agenticfs"
marker_path = f"{mount_dir}/hello-agenticfs-{uuid4().hex}.txt"
sandbox = None
marker_written = False
try:
sandbox = Sandbox.create(
template=require_env("E2B_TEMPLATE"),
timeout=300,
api_key=require_env("E2B_API_KEY"),
api_url=require_env("E2B_API_URL"),
domain=require_env("E2B_DOMAIN"),
volume_mounts={mount_dir: require_env("AGENTICFS_VOLUME_NAME")},
)
info = sandbox.get_info()
print(f"volume_mounts={info.volume_mounts}")
sandbox.files.write(marker_path, "hello agenticfs\n")
marker_written = True
content = sandbox.files.read(marker_path)
if content != "hello agenticfs\n":
raise RuntimeError(f"文件内容不一致: {content!r}")
finally:
try:
if sandbox is not None and marker_written:
sandbox.files.remove(marker_path)
finally:
if sandbox is not None:
sandbox.kill()
print("AgenticFS Volume 挂载读写验证成功")
运行示例:
python 02_mount_agenticfs_volume.py
输出 AgenticFS Volume 挂载读写验证成功 表示本次读写、测试文件清理和 Sandbox 释放已完成。
行为说明
-
volume_mounts使用{挂载目录: Volume 名称}格式,不使用 Volume ID。 -
Sandbox 暂停后再恢复时会恢复 Volume 挂载。
-
释放 Sandbox 不会删除 AgenticFS 中的数据。测试文件由示例主动删除,其他数据的保留和清理需单独处理。
-
本文复用 Volume 的
mountConfig.vpcConfig。需要覆盖时,可在创建 Sandbox 的 metadata 中通过fc.sandbox.network.vpc提供完整 VPC 配置;两处均配置时,以 metadata 为准。
使用限制
-
同一 Sandbox 中最多支持 5 个 AgenticFS 挂载点。数量包含创建时和后续追加的挂载,也包含直接提供存储配置的挂载。
-
挂载目录必须是规范化的绝对 Unix 路径,不能为
/,不能包含前后空格、重复分隔符、.或..路径段。 -
挂载目录不能使用
/bin、/opt、/var、/dev等系统目录及其子目录,也不能包含.cache等以.开头的隐藏目录。 -
如需通过隐藏目录访问挂载内容,可先挂载到符合要求的目录,再使用
ln -s创建指向该挂载目录的符号链接。 -
同一 Sandbox 中的挂载目录不能重复。
-
挂载目录最大长度为 128 个字符。
-
创建 Sandbox 时,多个 AgenticFS Volume 的
userID和groupID配置必须一致。追加挂载时,新增挂载的 UID(User ID,用户 ID)/GID(Group ID,用户组 ID)不得与当前 Sandbox 已有配置冲突。
常见问题
提示找不到 Volume
错误消息为 volume not found 时,核对请求中的 Volume 名称、API Key 所属 Team 和 API 地址的地域。按名称挂载需使用同一 Team 中已有的 Volume,不能填写 Volume ID。
创建 Sandbox 提示缺少 RAM 角色
错误消息包含 AgenticFS mount requires Function role 时,表示本次创建未获得挂载所需的 RAM 角色。
本文示例从 Volume 的 mountConfig.role 获取角色;如果创建请求的 metadata 显式设置了 fc.sandbox.auth.role,则以该值为准。核对实际使用的角色配置,补齐有效的角色 ARN(Alibaba Cloud Resource Name,资源名称)后重新提交创建请求。角色配置方法参见配置 RAM 角色。
已配置 VPC,为什么仍提示配置不完整
错误消息包含 mount requires complete VPC config 时,表示本次创建使用的 VPC 配置缺少必填项。
未在 metadata 中指定 VPC 时,检查 Volume 的 mountConfig.vpcConfig;已指定时,检查 fc.sandbox.network.vpc。实际使用的配置必须包含 vpcId、securityGroupId 和非空的 vSwitchIds。metadata 配置优先,不会用 Volume 的字段补齐不完整的 metadata。
Sandbox 创建超时或挂载失败
如果错误消息未指出具体参数问题,可按以下顺序排查实际挂载条件:
-
确认 Access Point 处于
active状态,地址和远端目录填写正确。 -
检查 Sandbox 所用 VPC 的路由、安全组及与 Access Point 的连通性。
-
检查实际使用的 RAM 角色,确认信任策略允许函数计算服务扮演,且具备目标存储所需的访问权限。
-
使用第二代运行时自定义模板时,按本文步骤一:准备第二代运行时镜像验证 AgenticFS 客户端。
Volume 已挂载,但文件读写失败
先确认应用访问的是本次指定的本地挂载目录,再根据文件操作的错误检查目录权限、UID/GID 和实际使用的 RAM 角色是否具备相应的读写权限。Access Point 的访问状态也需正常。
如需进一步排查,请保留完整错误信息和请求 ID。