在使用参数时,Azure API for App Container的作业会覆盖所有环境变量

后端开发 2026-07-09

我正在通过REST API调用Azure Container Apps的作业。

我的请求体看起来是这样的:curl --location 'https://management.azure.com/subscriptions/xxx/resourceGroups/xxxx/providers/Microsoft.App/jobs/xxxxxx/start?api-version=2026-01-01' \ --header 'Content-Type: application/json' \ --header 'Authorization: ••••••' \ --data '{ "containers": [ { "name": "xxx-job", "image": "xxxx.azurecr.io/xxx/xxx-job:latest", "command": ["python"], "args": [ "-m", "myjob.main", "--period-id", "xxxxx", "--job-type", "preprocessing" ], "env": [ { "name": "APPLICATIONINSIGHTS_CONNECTION_STRING", "value": "xxxx" }, { "name": "LOG_LEVEL", "value": "DEBUG" } ] } ] }

然而,像这样调用时,我收到了缺少环境变量(ENV变量)的错误提示。不过,我并不认为需要提供项目中定义的所有ENV变量?

我甚至尝试不在请求体中指定 "env" 部分,但问题仍然存在。这对我来说毫无意义,因为我本来就希望该作业能够读取预定义的ENV变量。

我在这里看到了类似的错误报告,链接如下 https://github.com/azure/azure-sdk-for-net/issues/50899

我使用这个API调用来启动容器作业:https://learn.microsoft.com/en-us/rest/api/resource-manager/containerapps/jobs/start?view=rest-resource-manager-containerapps-2026-01-01&tabs=HTTP

有人能给出建议吗?

解决方案

这是Container Apps作业启动覆盖的预期行为。不要只发送你想要修改的参数/环境变量。传递给 /jobs/{jobName}/start 的请求体会被视为执行模板,而不是对现有作业模板的补丁。如果你想在一次运行中覆盖参数,请先读取现有的作业模板:

GET .../providers/Microsoft.App/jobs/{jobName}?api-version=2026-01-01

properties.template,保留所有现有的容器/环境/资源等,仅修改 containers[0].args,然后将得到的模板以POST方式发送到 /start

如果你想按原样使用该作业,请在没有覆盖请求体的情况下调用 /start。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章