当前位置: 首页 > news >正文

【Azure Container App】使用 yaml 部署 Container App 时遇见 400 Bad Request 错误

问题描述

使用 az containerapp create --yaml <file> 创建 Azure Container App 时, yaml 文件中只包含简单的信息,结果遇见难以理解/无法正常分析的 400 Bad Request问题。

location: chinanorth3 properties: environmentId: "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.App/managedEnvironments/<environment name>" configuration: ingress: external: true targetPort: 8080 registries: - server: <ARC Name>.azurecr.cn identity: <user identity resource id>" template: containers: - name: myapp image: <Image URL:Tags> resources: cpu: 0.5 memory: 1Gi

在实际的操作中的错误信息:

az : WARNING: The behavior of this command has been altered by the following extension: containerapp At line:3 char:1 + az containerapp create --name my-container-app-0430 --resource-gr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (WARNING: The be...n: containerapp:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError ERROR: Bad Request({"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors occurred.","status":400,"errors":{"$":["The JSON value could not be converted to System.Boolean. Path: $ | LineNumber: 0 | BytePositionInLine: 4."]},"traceId":"00-*********-********-01"})

错误截图:


基于以上问题,应该如何解决呢?

问题解答

在使用 az containerapp create --yaml <file> 创建 Azure Container App 时,CLI 扩展会将完整的内部模型对象序列化后作为 HTTP PUT 请求体发送给 Azure Resource Manager(ARM)。

该序列化行为存在缺陷:即使 YAML 中未设置的可选字段也会被包含进请求体,并被显式赋值为 null 。

这种行为导致 ARM 在反序列化阶段出现类型转换错误,尤其是当某些字段在后端模型中为非空类型(例如 System.Boolean)时,ARM 尝试将 null 转换为布尔值会直接失败,最终返回 HTTP 400 错误。

通过 --debug 日志可以观察到请求体中包含大量 null 字段。

"allowInsecure": null 这一个字段正是问题的关键,因为 ARM 期望其为布尔类型而非 null,从而导致整体请求失败。

az containerapp create --name <xxxxx> --resource-group <xxxxx> --yaml "containerapp.yaml" --debug

( 为 az containerapp create 添加 --debug , 打印出完整的请求日志,就可以发现HTTP请求body中,很多字段默认添加了 null 值 )

补充说明:

  • az containerapp update --yaml 命令可以正常执行,因为它使用的是 HTTP PATCH,仅提交变更字段(不包含 null 字段)。
  • az deployment group create(Bicep/ARM 模板)也不存在该问题,因为其序列化过程不会注入 null 字段。

解决方案

在ACA的yaml文件中,指定 allowInsecure 的值为false就可以了。

参考资料

[containerapp] az containerapp create --yaml injects null fields into PUT request body, causing HTTP 400 (System.Boolean conversion error) #9729 : https://github.com/Azure/azure-cli-extensions/issues/9729

Configure ingress for your app in Azure Container Apps : https://learn.microsoft.com/en-us/azure/container-apps/ingress-how-to?pivots=azure-cli

Azure Container Apps ARM and YAML template specifications : https://learn.microsoft.com/en-us/azure/container-apps/azure-resource-manager-api-spec?tabs=yaml


当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

http://www.jsqmd.com/news/728601/

相关文章:

  • 决策框架:在技术选型、职业选择等关键节点如何不迷茫?
  • HPH内部构造大揭秘:三大系统配合节节通
  • 别再让模型‘偏科’了!PyTorch实战:用BCEWithLogitsLoss的weight和pos_weight搞定二分类数据不平衡
  • 时空动态热力图秒级渲染,R 4.5新geoviews引擎实操指南,错过再等两年
  • 【flutter for open harmony】第三方库Flutter 鸿蒙版 通知中心 实战指南(适配 1.0.0)✨
  • 内存带宽吃紧?GC风暴频发?R 4.5并行计算效率断崖式下降的5个反直觉元凶,今夜必须修复
  • 策略聚类技术:基于语义相似性的专业领域解决方案分类
  • 交大复旦 Bench2Drive-Speed:速度可控的自动驾驶评测基准
  • 2026成都法拍房辅拍机构选型:核心技术维度拆解 - 优质品牌商家
  • DOM 解析
  • 吹自己熟悉 RAG,结果被问完整链路,面试官冷冷一句:“你之前项目是怎么跑通的?”,我的小手已经无处安放
  • 非科班,我转大模型成功了吗
  • 从触摸开关到声光报警:拆解NE555单稳态电路的两种经典接法(附稳定性实测对比)
  • Vivado HLS 提供了 C++ 模板类 hls::stream<>
  • Flutter for OpenHarmony跨平台技术5
  • ScienceDecrypting:终极CAJ文档解密指南,3步实现科学文库文档永久保存
  • 压力测试工具wrk安装、使用
  • Docker 27调度器如何用轻量级推理模型替代K8s Scheduler?——基于eBPF+ONNX Runtime的毫秒级决策架构
  • DeepSeek V4:推理成本致胜
  • Unity游戏开发实战:手把手教你用C#实现一个简单的反向运动学(IK)控制器
  • HPH构造解析:三大系统协同,驱动智能制造革新
  • 从本地开发到云服务器:手把手教你用宝塔面板部署JeecgBoot(含域名绑定和SSL证书)
  • CVE-2026-31431 Copy Fail:Linux 本地提权漏洞原理、影响面与排查修复建议
  • taotoken 助力初创团队实现多模型 api 成本精细化管理
  • springboot+vue3的旅游民宿预定管理系统的设计与实现
  • Spark NLP:工业级分布式自然语言处理框架实战指南
  • 别再死记硬背了!用Multisim仿真带你5分钟搞懂负反馈四种组态
  • ARM SIMD与向量运算指令深度解析
  • 为什么92%的智能制造项目卡在Docker 27集群验收?——来自17家头部车企的集群CI/CD流水线审计报告(含3份脱敏YAML模板)
  • 手把手教你为ESP32开发板移植AC101音频Codec驱动(基于ESP-ADF框架)