介绍如何通过云沙箱 OpenAPI SDK 以代码方式构建、查询、更新和删除自定义模板,并按代际说明镜像来源、构建方式与接入 VPC 后的网络配置。
自定义模板用于定义沙箱运行所需的镜像和配置。本文按二代、一代分别介绍镜像来源和构建方式,再说明接入 VPC 后的网络配置。示例使用 Python,通过云沙箱 OpenAPI SDK 调用;TypeScript、Go、Java SDK 提供同名能力。
不同代际支持的镜像来源和配置项有所不同,编写代码前请先确认使用的模板代际。
对比项 | 二代模板 | 一代模板 |
镜像来源 | 官方公共镜像、ACR 企业版(ACR EE)镜像 | 官方公共镜像、ACR EE 镜像、OCI 镜像仓库 |
构建方式与启动配置 | 支持启动命令( | 通过 |
磁盘口径 |
|
|
日志配置 | 示例统一包含 | 示例统一包含 |
两代运行时的完整能力差异参见沙箱运行时一代与二代的差异。
开始之前
本节集中说明后续示例的公共准备工作,后续各节在此基础上给出完整的构建示例。后续创建和访问沙箱的示例还使用 E2B SDK,需一并安装并配置其访问凭证环境变量。
开通函数计算和云沙箱,在云沙箱控制台创建 Team 并获取 Team ID。
准备阿里云账号或 RAM 用户,并为调用身份配置模板 API 权限。最小权限策略示例:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sandbox:CreateTemplate", "sandbox:GetTemplate", "sandbox:ListTemplates", "sandbox:UpdateTemplate", "sandbox:DeleteTemplate" ], "Resource": "*" } ] }支持按 Team 精确授权模板资源,资源描述格式为
acs:sandbox:<region>:<account-id>:teams/<team-id>/templates/*。确认模板所在地域(示例使用
cn-hangzhou,请替换为目标地域)。准备镜像地址;使用私有镜像时准备对应凭证与拉取网络,详见各代际的镜像来源章节。
准备日志资源:在与云沙箱相同的地域下创建 SLS Project 和 Logstore,供
log_config投递构建与运行日志。
安装 SDK(以 Python 为例):
python3 -m venv .venv
source .venv/bin/activate
pip install "alibabacloud_sandbox20260820>=1.1.0"设置身份凭证环境变量:
export ALIBABA_CLOUD_ACCESS_KEY_ID="<your-access-key-id>"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="<your-access-key-secret>"
# 使用 STS 临时凭证时还需要设置:
# export ALIBABA_CLOUD_SECURITY_TOKEN="<your-security-token>"公共初始化代码,后续示例均以此为基础:
import os
import time
from alibabacloud_sandbox20260820 import models
from alibabacloud_sandbox20260820.client import Client as SandboxClient
from alibabacloud_tea_openapi import models as open_api_models
REGION = "cn-hangzhou"
TEAM_ID = "<your-team-id>"
config = open_api_models.Config(
access_key_id=os.environ["ALIBABA_CLOUD_ACCESS_KEY_ID"],
access_key_secret=os.environ["ALIBABA_CLOUD_ACCESS_KEY_SECRET"],
region_id=REGION,
endpoint=f"sandbox.{REGION}.aliyuncs.com",
)
pop_client = SandboxClient(config)
def wait_ready(template_id, timeout=900):
"""轮询模板构建状态直到终态,返回 status.state。"""
deadline = time.time() + timeout
while time.time() < deadline:
resp = pop_client.get_template(
template_id, models.GetTemplateRequest(team_id=TEAM_ID))
state = resp.body.status.state
if state in ("ready", "error"):
if state == "error":
print(f"构建失败: {resp.body.status.reason.message}")
return state
time.sleep(10)
return "timeout"镜像要求
自定义镜像需满足下表要求,按“硬性 / 条件 / 推荐”分级;二代模板在此基础上有更严格的发行版要求,请参见二代模板。
级别 | 要求 | 不满足时影响 |
硬性 | 架构为 | 模板构建直接失败 |
硬性 | ACR 镜像不开启镜像加速选项 | 模板构建直接失败 |
硬性 |
| 沙箱无法初始化默认用户,启动失败 |
条件 | Bash 位于镜像内的固定路径 |
|
条件 | PATH 中存在 | Python |
条件 | PATH 中存在 | JavaScript |
条件 | 按需提供 | 对应的 Git、SSH、HTTPS、编译安装操作不可用 |
推荐 | 系统 PATH 至少包含 | 登录 Shell 常用命令可能找不到 |
向自己的镜像仓库推送镜像时,不要向同一个 tag 推送内容不同的镜像。每个不同的镜像都必须使用新的唯一 tag(如版本号、日期或提交 ID),并让模板固定引用对应 tag。
二代模板
二代模板基于轻量虚拟机(MicroVM)隔离,支持快照能力:构建期执行的启动命令和运行环境会固化到模板快照,基于该模板创建沙箱时直接恢复运行态,创建耗时显著低于一代。二代模板镜像需为 Ubuntu/Debian 系,并保留 systemd、openssh-server、sudo 等系统组件。
建议始终显式设置 disk_size(示例使用 15360 MB),避免平台默认值随版本变化带来的规格校验差异。
选择镜像来源
官方公共镜像
官方公共镜像在全部支持地域均有提供,二代模板地址格式为 fc-e2b-registry.<地域>.cr.aliyuncs.com/runtime-v2/<镜像名>:<tag>,无需准备镜像仓库、凭证与网络配置。镜像地址的地域须与模板所在地域一致。
最小构建示例:
resp = pop_client.create_template(
models.CreateTemplateRequest(
body=models.CreateTemplateInput(
name=f"template-gen2-demo-{int(time.time())}",
team_id=TEAM_ID,
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
disk_size=15360,
# 构建与运行日志投递到同地域 SLS。
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image=f"fc-e2b-registry.{REGION}.cr.aliyuncs.com/runtime-v2/base:v0.0.53",
generation=2, # 必填:2 表示二代模板。
),
),
)
)
)
template_id = resp.body.template_id
state = wait_ready(template_id)
assert state == "ready"ACR EE 镜像
使用 ACR 企业版实例中的自有镜像。
前置准备:
在与云沙箱相同的阿里云账号和地域下创建 ACR EE 实例(经济版暂不支持)。
为 ACR EE 实例添加专有网络,确保云沙箱可以通过 VPC 拉取镜像。
创建命名空间与镜像仓库并推送镜像,镜像地址使用实例的 VPC 访问域名(
-vpc后缀),例如<instance>-registry-vpc.cn-hangzhou.cr.aliyuncs.com/<namespace>/<image>:<tag>。
网络约束:
ACR EE 实例的访问控制中已添加至少一个专有网络 VPC 绑定,且绑定处于“已生效”状态。云沙箱经该绑定在 VPC 内分配的访问 IP 拉取镜像;绑定刚创建存在“生效中”窗口,绑定失效会导致拉取失败,可在实例的访问控制页面确认绑定状态与访问 IP。
拉取网络的 VPC 需为 ACR EE 实例已绑定的 VPC,且该 VPC 下至少有一个 vSwitch 位于函数计算支持的可用区。
ACR EE 镜像仓库、VPC、vSwitch 与云沙箱需位于同一地域。
VPC 网段需使用 RFC 1918 规定的私有地址段,即
10.0.0.0/8、172.16.0.0/12或192.168.0.0/16,不支持公网私用。VPC 下需至少配置一个自建安全组,其出方向需放行 443/TCP。普通安全组出方向默认允许所有访问(无出方向规则即满足);企业级安全组出方向默认禁止所有访问,需显式添加放行 443/TCP 的出方向规则。
需确保 ACR EE 实例在 VPC 内存在入口 ENI。如果 ENI 已被删除,可以通过重新绑定 VPC 的方式重新创建。
函数计算支持的可用区会随地域和产品能力调整,最新列表参见配置网络。
拉取方式:只传 image 时,平台按镜像地址自动推导 ACR EE 实例与仓库类型,使用实例临时授权拉取,并从实例绑定的 VPC 推导拉取网络。需要显式指定实例、凭证或拉取网络时,再传 acr_instance_id、registry_config.auth_config 与 registry_config.network_config;实例推导出的 vSwitch 落在不支持的可用区导致拉取失败时,必须用 network_config 显式指定 VPC 三件套(vpc_id/v_switch_id/security_group_id)。
resp = pop_client.create_template(
models.CreateTemplateRequest(
body=models.CreateTemplateInput(
name=f"template-gen2-acree-{int(time.time())}",
team_id=TEAM_ID,
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
disk_size=15360,
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image="<instance>-registry-vpc.cn-hangzhou.cr.aliyuncs.com/<namespace>/<image>:<tag>",
generation=2,
acr_instance_id="cri-xxxxxx",
registry_config=models.CreateTemplateRegistryConfig(
auth_config=models.CreateTemplateRegistryAuthConfig(
user_name="<username>",
password="<password>",
),
network_config=models.CreateTemplateRegistryNetworkConfig(
vpc_id="<vpc-id>",
v_switch_id="<vsw-id>",
security_group_id="<sg-id>",
),
),
),
),
)
)
)配置启动命令和就绪命令
以一个预置 HTTP 服务的场景说明两个命令的配合方式:构建期平台以后台进程执行 start_command 启动服务,然后反复执行 ready_command,退出码为 0 一次即判定服务就绪,随后对仍在运行的沙箱制作模板快照。基于该模板创建的沙箱在创建时服务已在运行,创建即可访问,不会再次执行启动命令。
执行时机:两个命令仅在模板构建期执行,结果固化进快照;创建沙箱时不重放。
填写格式:均为字符串形式的 Shell 命令;两个参数均为可选,不配置
start_command则不执行额外的启动命令。失败处理:
start_command提前退出、ready_command持续失败或等待超过 5 分钟,模板构建失败;ready_command写错的典型表现是构建超时而非参数报错。日志排查:命令输出与失败原因通过
log_config投递到 SLS,在对应 Logstore 中查看。
resp = pop_client.create_template(
models.CreateTemplateRequest(
body=models.CreateTemplateInput(
name=f"template-gen2-service-{int(time.time())}",
team_id=TEAM_ID,
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
disk_size=15360,
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image=f"fc-e2b-registry.{REGION}.cr.aliyuncs.com/runtime-v2/base:v0.0.53",
generation=2,
# 构建期以后台进程执行。
start_command="python3 -m http.server 8000",
# 反复执行,退出码为 0 一次即判定就绪。
ready_command="curl -sf http://localhost:8000/ > /dev/null",
),
),
)
)
)
template_id = resp.body.template_id
state = wait_ready(template_id)
assert state == "ready"构建就绪后,使用 E2B SDK 创建沙箱并直接访问服务:
from e2b import Sandbox
sandbox = Sandbox.create(
template=template_id,
timeout=600,
# SDK 自动读取 E2B_API_KEY / E2B_API_URL / E2B_DOMAIN 环境变量。
api_url=f"https://api.{REGION}.e2b.fc.aliyuncs.com",
domain=f"{REGION}.e2b.fc.aliyuncs.com",
)
try:
host = sandbox.get_host(8000)
print(f"https://{host}")
finally:
sandbox.kill()一代模板
选择镜像来源
官方公共镜像:一代模板地址格式为
fc-e2b-registry.<地域>.cr.aliyuncs.com/runtime/<镜像名>:<tag>(与二代的runtime-v2前缀不同),无需凭证与网络配置,平台直接使用,不再执行构建注入。ACR EE 镜像:实例准备、网络约束与拉取方式同二代ACR EE 镜像;镜像地址使用
-vpc域名。同账号镜像可免凭证,由平台使用实例临时授权拉取。OCI 镜像仓库:任意标准 OCI 仓库(公网可达或 VPC 内私有)。通过
registry_config.auth_config提供仓库凭证(user_name/password,需同时具备拉取和推送权限);VPC 内私有仓库还需通过registry_config.network_config提供拉取网络三件套(vpc_id/v_switch_id/security_group_id)。
选择构建方式
构建非官方镜像时,一代模板通过 build_config 控制两个构建动作:copy(把构建产物推送为目标镜像)和 envd_inject(注入沙箱运行依赖)。
对比项 | 注入构建(copy + envd_inject 开启) | 直接使用源镜像(均关闭) |
构建流程 | 平台拉取源镜像,注入沙箱运行依赖,推送为目标镜像 | 平台直接使用源镜像,不注入、不修改 |
输入要求 | 源镜像无需改造;目标仓库凭证需有推送权限 | 镜像需已自行包含沙箱运行依赖 |
适用场景 | 常规自定义镜像(默认方式) | 官方公共镜像,或已自行集成运行依赖的镜像、只读镜像仓库 |
build_config 缺省时按源镜像自动推导:官方公共镜像直接使用,不执行构建;其他镜像执行注入构建。注意 copy 和 envd_inject 需同时开启或同时关闭,只开启其中一个会返回 400。
直接使用源镜像
官方公共镜像自动按直接使用源镜像的方式处理,无需额外配置;自定义镜像只有已自行包含沙箱运行依赖时才适用。
resp = pop_client.create_template(
models.CreateTemplateRequest(
body=models.CreateTemplateInput(
name=f"template-gen1-direct-{int(time.time())}",
team_id=TEAM_ID,
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image=f"fc-e2b-registry.{REGION}.cr.aliyuncs.com/runtime/code-interpreter-v1:v0.0.53",
generation=1,
),
),
)
)
)镜像来源的差异集中在上一节说明;本节重点解释构建方式选择,相同配置不再重复展开。
注入构建(默认)
build_config 缺省时即按注入构建执行。按镜像所在仓库分两种常见场景:
场景一:ACR EE 私网镜像
resp = pop_client.create_template(
models.CreateTemplateRequest(
body=models.CreateTemplateInput(
name=f"template-gen1-builder-{int(time.time())}",
team_id=TEAM_ID,
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image="<instance>-registry-vpc.cn-hangzhou.cr.aliyuncs.com/<namespace>/<image>:<tag>",
generation=1, # 必填:1 表示一代模板。
),
),
)
)
)
template_id = resp.body.template_id
state = wait_ready(template_id)
assert state == "ready"场景二:VPC 内私有 OCI 仓库
适用于 Registry 域名仅在 VPC 内可达的自建私有仓库(例如 VPC 内 ECS 上自建的 Harbor)。约束:
仓库必须以 HTTPS 提供服务且监听 443 端口,不支持自定义端口或 HTTP。
必须提供
registry_config.network_config(VPC 三件套vpc_id/v_switch_id/security_group_id,需同时提供)。使用自签证书的仓库还必须在
cert_config中声明跳过证书校验(insecure=True),否则构建在拉取源镜像阶段以 x509 证书错误失败。凭证通过
auth_config照常传入,需具备拉取和推送权限。
resp = pop_client.create_template(
models.CreateTemplateRequest(
body=models.CreateTemplateInput(
name=f"template-gen1-oci-{int(time.time())}",
team_id=TEAM_ID,
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image="registry.internal.example.com/<namespace>/<image>:<tag>",
generation=1,
registry_config=models.CreateTemplateRegistryConfig(
auth_config=models.CreateTemplateRegistryAuthConfig(
user_name="<username>",
password="<password>",
),
network_config=models.CreateTemplateRegistryNetworkConfig(
vpc_id="<vpc-id>",
v_switch_id="<vsw-id>",
security_group_id="<sg-id>",
),
cert_config=models.CreateTemplateRegistryCertConfig(
insecure=True, # 自签证书时传入
),
),
),
),
)
)
)
template_id = resp.body.template_id
state = wait_ready(template_id)
assert state == "ready"管理模板
查询模板信息和构建状态
通过 ListTemplates 分页查询 Team 下的模板列表,通过 GetTemplate 查询单个模板的配置与构建状态。status.state 取值:pending(等待构建)、building(构建中)、updating(更新配置后重建中)、ready(可用于创建沙箱)、error(构建失败,status.reason.message 给出原因)。建议按 5~10 秒间隔轮询。
完整示例(循环翻页列出全部模板):
import os
from alibabacloud_sandbox20260820 import models
from alibabacloud_sandbox20260820.client import Client as SandboxClient
from alibabacloud_tea_openapi import models as open_api_models
REGION = "cn-hangzhou"
TEAM_ID = "<your-team-id>"
config = open_api_models.Config(
access_key_id=os.environ["ALIBABA_CLOUD_ACCESS_KEY_ID"],
access_key_secret=os.environ["ALIBABA_CLOUD_ACCESS_KEY_SECRET"],
region_id=REGION,
endpoint=f"sandbox.{REGION}.aliyuncs.com",
)
pop_client = SandboxClient(config)
next_token = None
while True:
request = models.ListTemplatesRequest(team_id=TEAM_ID)
if next_token:
request.next_token = next_token
response = pop_client.list_templates(request)
for template in response.body.templates:
print(template.template_id, template.name, template.status.state)
next_token = response.body.next_token
if not next_token:
break使用已构建的模板创建沙箱
模板进入 ready 状态后,使用 E2B SDK 创建沙箱并验证运行结果:
from e2b import Sandbox
sandbox = Sandbox.create(
template=template_id,
timeout=600,
api_url=f"https://api.{REGION}.e2b.fc.aliyuncs.com",
domain=f"{REGION}.e2b.fc.aliyuncs.com",
)
try:
result = sandbox.commands.run("printf hello")
print(result.stdout)
finally:
sandbox.kill()修改配置并重新构建
使用 UpdateTemplate 原地修改模板配置,可更新镜像、规格、网络等配置项。提交后平台自动重新构建,模板回到 updating 状态,构建完成后恢复 ready:
pop_client.update_template(
template_id,
models.UpdateTemplateRequest(
team_id=TEAM_ID,
body=models.PublicUpdateTemplateInput(
runtime_config=models.PublicUpdateTemplateRuntimeConfig(
cpu=4,
memory_size=4096,
),
),
),
)
state = wait_ready(template_id)
assert state == "ready"只需传入要修改的配置项,未传入的配置项保持原有取值。
清理不再使用的模板
pop_client.delete_template(
template_id, models.DeleteTemplateRequest(team_id=TEAM_ID))模板处于任意状态(含构建中)都可删除,删除会终止进行中的构建。
网络配置(高级)
本节以二代模板为例,介绍配置 vpc_config 后的网络访问方式,重点说明 vpc_config 与 internet_access 的配合关系。未配置 VPC 时,沙箱默认可通过平台出口访问公网,出口 IP 不固定。
场景选择
场景 | vpc_config | internet_access | VPC 公网出口要求 | 公网访问结果 |
访问 VPC,同时通过平台出口访问公网 | 配置 | 开启(默认) | 无需为此配置固定公网出口 | 可访问公网,出口 IP 不固定 |
访问 VPC,不访问公网 | 配置 | 关闭 | VPC 不提供公网出口 | 无法访问公网 |
访问 VPC,同时通过固定 IP 访问公网 | 配置 | 关闭 | VPC 配置公网 NAT 网关、EIP 及相应路由与 SNAT 规则 | 可通过配置的固定出口 IP 访问公网 |
注意:VPC 网段需使用 RFC 1918 私有地址段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16);vSwitch 需位于函数计算支持的可用区。
场景一:访问 VPC 和公网,出口 IP 不固定
配置 vpc_config,并保持 internet_access 开启(缺省即开启):
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
disk_size=15360,
internet_access=True,
vpc_config=models.CreateTemplateVPCConfig(
vpc_id="<vpc-id>",
v_switch_ids=["<vsw-id>"],
security_group_id="<sg-id>",
),
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image=f"fc-e2b-registry.{REGION}.cr.aliyuncs.com/runtime-v2/base:v0.0.53",
generation=2,
),
)验证方式:创建沙箱后分别访问 VPC 内资源(如内网域名或私网 IP)和公网地址(如 curl https://www.aliyun.com),两者均可访问。该方式不提供固定公网出口 IP。
场景二:仅访问 VPC,不访问公网
配置 vpc_config,并关闭 internet_access;同时确认 VPC 本身未配置公网出口:
runtime_config=models.CreateTemplateRuntimeConfig(
cpu=2,
memory_size=2048,
disk_size=15360,
internet_access=False,
vpc_config=models.CreateTemplateVPCConfig(
vpc_id="<vpc-id>",
v_switch_ids=["<vsw-id>"],
security_group_id="<sg-id>",
),
log_config=models.CreateTemplateLogConfig(
project="<sls-project>",
logstore="<sls-logstore>",
),
sandbox_config=models.CreateTemplateSandboxConfig(
image=f"fc-e2b-registry.{REGION}.cr.aliyuncs.com/runtime-v2/base:v0.0.53",
generation=2,
),
)验证方式:沙箱内访问 VPC 内资源正常;访问公网地址超时或被拒绝。
场景三:访问 VPC 和公网,使用固定出口 IP
配置 vpc_config,并关闭 internet_access。在 VPC 侧配置公网 NAT 网关和 EIP,以及相应的路由与 SNAT 规则,使公网流量通过指定出口访问。详细操作,请参考沙箱实例出公网访问(固定 IP)。
VPC 侧准备:为 VPC 配置公网 NAT 网关并绑定 EIP,为相关 vSwitch 配置指向 NAT 网关的路由与 SNAT 规则,确认沙箱所在 vSwitch 的流量能够通过该出口访问公网。
模板侧配置:参数与场景二相同(
internet_access=False+vpc_config)。
验证方式:在沙箱内查询出口 IP(如 curl ifconfig.me),返回的应为配置的 EIP。
场景二和场景三的模板构建参数相同,区别在于 VPC 是否具备公网出口。因此,关闭 internet_access 后,仍需结合 VPC 的网络配置判断沙箱是否能够访问公网。常见问题
一代模板能否配置启动命令和就绪命令?
不能。一代模板设置 start_command 或 ready_command 会返回 400 InvalidParameter。需要把常驻进程固化到模板时,请使用二代模板。
为什么所有构建示例都包含日志配置?
log_config 将模板构建期和沙箱运行期的日志投递到账号下的 SLS,便于在构建和运行验证过程中定位问题:构建期可查看启动命令、就绪命令的输出和构建失败原因;运行期可查看沙箱内进程日志。日志入口为 SLS 控制台中配置的 Project 和 Logstore,需与云沙箱位于同一地域。
为什么关闭 internet_access 后仍可能访问公网?
internet_access 只控制平台侧公网出口。如果模板接入的 VPC 已配置公网出口(NAT 网关 + EIP + SNAT),沙箱仍可通过该出口访问公网。需要彻底隔离公网时,同时检查模板参数和 VPC 网络配置。
如何获得固定公网出口 IP?
按场景三配置:模板侧关闭 internet_access 并配置 vpc_config;VPC 侧配置公网 NAT 网关和 EIP,并配置相应路由与 SNAT 规则。验证沙箱内出口 IP 是否为配置的 EIP。
镜像拉取失败、构建失败或启动失败时如何排查?
通过
GetTemplate查看status.reason.message获取失败阶段与原因。在
log_config配置的 SLS Logstore 中查看详细日志。按失败阶段分别排查:
镜像拉取失败:确认镜像地址与 tag 正确、凭证具备拉取权限、拉取网络可达(ACR EE 实例 VPC 绑定已生效、安全组出方向放行 443/TCP)。
构建失败:确认镜像满足镜像要求(
linux/amd64架构、存在/bin/bash、/etc/passwd可写等);一代模板确认目标仓库凭证具备推送权限。启动命令或就绪检查失败(二代):确认
start_command不会提前退出,ready_command探测的是真实就绪条件且能在 5 分钟内通过。