Agent Sandbox Registry

python-sdk

FC Claude Code 镜像实地检查

无英文版

.agents/evidence/research/2026-09-04-fc-claude-code-image-inspection.md

⚠️ HISTORICAL SNAPSHOT — 标注追加于 2026-09-24(任务 #122,承接 #109 审计;正文未改写) 本报告为 2026-09-04 的只读镜像实地检查快照。文中提及的 SDK 旧品牌 serverless-sandbox 现为 agent-sandbox(见 ADR 2026-09-09-brand-rename-sbox-to-abx.md);镜像检查结论本身不受更名影响。

FC Claude Code 镜像实地检查

检查日期: 2026-09-04 镜像: fc-e2b-registry.cn-hangzhou.cr.aliyuncs.com/runtime/claude-code:v0.0.44

拉取结果

镜像元数据

项目 值
CMD None (无 CMD)
ENTRYPOINT ["/.fce2b/entrypoint"]
EXPOSED PORTS 49983/tcp, 5000/tcp, 50005/tcp
WORKDIR /home/user
USER root (Dockerfile 中先设为 user,但运行时需 root 权限启动 entrypoint)
VOLUMES 无

环境变量

变量名 值 说明
ENVD_BIN /.fce2b/envd envd 守护进程二进制路径
ENVD_PORT 49983 envd HTTP API 监听端口
ENTRYPOINT_PORT 5000 Gateway 入口端口
GATEWAY_LISTEN 0.0.0.0:5000 Gateway 监听地址
CODE_INTERPRETER_BIN /.fce2b/sandbox-code-interpreter Code Interpreter 二进制路径
CODE_INTERPRETER_PORT 49999 Code Interpreter 端口
FC_E2B_CODE_INTERPRETER_ENABLED false Claude Code 模板禁用了 Code Interpreter
MCP_PORT 50005 MCP 服务端口
IMAGE_VARIANT claude 镜像变体标识
HTTP_PROXY / HTTPS_PROXY (空) 代理已清空
PATH /home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/.fce2b 包含 claude CLI 和 fce2b 工具路径

Labels

Label 值
layer claude-code
maintainer Aliyun FC Sandbox Team
description Claude Code: E2B 兼容沙箱,预装 Anthropic Claude Code CLI

容器内文件结构

核心二进制文件 (/.fce2b/)

/.fce2b/
├── entrypoint              # Go 静态链接 ELF x86-64, Gateway 进程管理器
├── envd                    # Go 静态链接 ELF x86-64, E2B envd 守护进程 (v0.1.14)
└── sandbox-code-interpreter # Go 静态链接 ELF x86-64, Code Interpreter (本模板中未启用)

三个均为 Go 编译的静态链接二进制文件,无外部依赖。

Claude Code 安装位置

/home/user/.local/bin/claude                              # Claude Code CLI 入口
/home/user/.local/lib/node_modules/@anthropic-ai/claude-code/
├── package.json              # @anthropic-ai/claude-code v2.1.211
├── cli-wrapper.cjs
├── install.cjs
├── sdk-tools.d.ts
├── bin/claude.exe            # Windows 二进制 (不适用)
└── node_modules/@anthropic-ai/claude-code-linux-x64/
    └── claude                # Linux x64 原生二进制

Claude Code 版本: @anthropic-ai/claude-code@2.1.211

预装开发工具

工具 路径
Node.js /usr/bin/node, /usr/local/bin/node
npm /usr/local/bin/npm
npx /usr/local/bin/npx
Go /usr/local/go/bin/go
Python 3.13 系统自带 (Ubuntu 25.04)
pip /usr/lib/python3/dist-packages/pip/
Bun /usr/local/bin/bun
pnpm /usr/local/bin/pnpm
git 系统安装

配置文件

Server 发现

1. Gateway / Entrypoint (端口 5000)

二进制: /.fce2b/entrypoint 语言: Go (静态链接) 包路径: entrypoint/cmd/gatewayd

这是一个 反向代理 Gateway,包含以下核心组件(从二进制字符串提取的 Go 包路径):

组件 Go 包路径 功能
Router entrypoint/internal/gateway/proxy.(*Router).ServeHTTP HTTP 路由分发
Envd Proxy proxy.(*Router).routeEnvd 代理请求到 envd (49983)
CI Proxy proxy.(*Router).routeCI 代理请求到 Code Interpreter (49999)
Dynamic Port Proxy proxy.(*Router).routeDynamic 代理动态端口请求
Process Manager process.(*Manager).StartAll 启动和监管子进程
Process Reaper process.(*Reaper).Start 僵尸进程回收
Startup Guard proxy.(*StartupGuard).WaitForBackend 等待后端就绪
Config config.LoadFromEnv 从环境变量加载配置

关键发现: - 支持 custom-bootstrap 模式(从字符串中提取到 custom-bootstrap) - 有健康检查端点 /health - 使用 X-Sandbox-Port 和 E2b-Sandbox-Id HTTP 头 - 错误消息含 "Sandbox is starting, please retry" — 说明有启动就绪检测 - 含 CA 证书注入逻辑 (CA cert injection, REQUESTS_CA_BUNDLE, NODE_EXTRA_CA_CERTS)

2. envd 守护进程 (端口 49983)

二进制: /.fce2b/envd 语言: Go (静态链接) 版本: v0.1.14 (从字符串提取) 源码: 与 e2b-dev/infra 的 envd 同源

这是 E2B 标准的 sandbox 内守护进程,提供如下 HTTP API(从 OpenAPI spec envd.yaml 确认):

端点 方法 功能 对外开放
/health GET 健康检查 是
/metrics GET 资源使用指标 (CPU, 内存, 磁盘) 是
/envs GET 获取环境变量 是
/files GET 下载文件 是
/files POST 上传文件 (multipart/form-data 或 octet-stream) 是
/files/compose POST 零拷贝文件合并 是
/init POST 初始化沙箱 (设置 access token, 环境变量, 用户等) 否 (内部)
/freeze POST 冻结工作负载 cgroup 否 (内部)
/unfreeze POST 解冻工作负载 cgroup 否 (内部)
/collapse POST 堆内存整理 否 (内部)
/fsfreeze POST 冻结文件系统 否 (内部)
/fsthaw POST 解冻文件系统 否 (内部)
/upgrade POST envd 热升级 否 (内部)

额外的 gRPC/Connect 服务(从 envd Go 包结构确认): - services/filesystem — 文件系统操作 (gRPC via Connect) - services/process — 进程管理 (gRPC via Connect)

认证方式:X-Access-Token HTTP header。

3. Code Interpreter (端口 49999) — 本模板未启用

二进制: /.fce2b/sandbox-code-interpreter 状态: FC_E2B_CODE_INTERPRETER_ENABLED=false

在 Claude Code 模板中被显式禁用。

4. MCP 端口 (50005) — 暴露但实际能力有限

环境变量中声明了 MCP_PORT=50005,端口已暴露,但根据官方文档: - getMcpUrl() / getMcpToken() 不支持 - SDK MCP 创建参数 不支持 - 仅支持通过 claude mcp add 手动注册 MCP Server

启动链路

docker run → /.fce2b/entrypoint (PID 1, Gateway 进程管理器)
  ├── 1. 加载环境变量配置 (config.LoadFromEnv)
  ├── 2. 启动子进程管理器 (process.(*Manager).StartAll)
  │     ├── 启动 /.fce2b/envd -port 49983
  │     │     └── envd 监听 0.0.0.0:49983
  │     │     └── 提供文件操作 / 进程管理 / 指标 HTTP+gRPC API
  │     └── (如果 FC_E2B_CODE_INTERPRETER_ENABLED=true)
  │           └── 启动 /.fce2b/sandbox-code-interpreter (本模板跳过)
  ├── 3. 启动 HTTP 反向代理 Router
  │     └── 监听 0.0.0.0:5000 (GATEWAY_LISTEN)
  │     └── 路由规则:
  │           ├── /health, /metrics, /envs, /files/* → envd (127.0.0.1:49983)
  │           ├── /init, /freeze, /unfreeze 等内部路由 → envd
  │           ├── Code Interpreter 路由 → 127.0.0.1:49999 (如已启用)
  │           └── 动态端口路由 (X-Sandbox-Port) → 对应端口
  ├── 4. 僵尸进程回收器 (process.(*Reaper))
  └── 5. 等待 orchestrator 调用 /init 完成初始化
        └── /init 设置 access token、环境变量、默认用户等

对外暴露的最终监听进程: - 端口 5000: Gateway (entrypoint) — 所有外部请求的入口 - 端口 49983: envd — 直接的 sandbox API (通常通过 Gateway 访问) - 端口 50005: MCP (暴露但功能受限)

关键结论

  1. 容器内有 HTTP server: 有两个。
  2. Gateway (/.fce2b/entrypoint): Go 编写的反向代理,监听 5000 端口,是所有外部请求的入口。
  3. envd (/.fce2b/envd): Go 编写的 E2B sandbox 守护进程,监听 49983 端口,提供文件上传/下载、进程管理、指标查询等 API。

  4. Server 提供的 API:

  5. 文件上传/下载 (GET/POST /files)
  6. 文件合并 (POST /files/compose)
  7. 环境变量查询 (GET /envs)
  8. 资源指标 (GET /metrics)
  9. 健康检查 (GET /health)
  10. 文件系统和进程管理 (gRPC/Connect 协议)
  11. 沙箱生命周期管理 (/init, /freeze, /unfreeze, /upgrade — 内部接口)

  12. 这个 server 是 envd: 是的,envd v0.1.14,与 E2B 开源基础设施 (e2b-dev/infra) 中的 envd 同源。但阿里云额外加了一层 Gateway (entrypoint) 作为反向代理层,这是 FC 平台特有的。

  13. 启动链路: entrypoint (Gateway) 是 PID 1,它作为进程管理器启动 envd,然后作为反向代理将请求分发给 envd 和其他后端服务。外部通过端口 5000 访问所有功能。

  14. 没有我们 SDK 的代码: 镜像内没有任何 Python SDK(无 serverless-sandbox、无 e2b SDK)。镜像中的 Python 仅有系统自带的 Python 3.13 + pip,没有额外安装的 Python 包。SDK 运行在客户端侧,通过 HTTP 与容器内的 envd API 通信。

  15. Claude Code 是通过 npm 全局安装的: @anthropic-ai/claude-code@2.1.211,包含一个预编译的 Linux x64 原生二进制。CLI 入口在 /home/user/.local/bin/claude。Claude Code 本身不是一个 server,它是一个 CLI 工具,由 SDK 通过 sandbox.commands.run('claude ...') 调用。

  16. Code Interpreter 在本模板中被禁用 (FC_E2B_CODE_INTERPRETER_ENABLED=false)。

  17. 镜像预装了丰富的开发工具: Node.js, Go, Python 3.13, Bun, pnpm, npm, git 等,pip 配置使用阿里云镜像源。