为何Azure ACI重复拉取镜像且丢失容器实例跟踪?
问题特征
- 容器内部运行正常(内部代码执行正常),父容器组状态也显示为Succeeded,但Azure未通知容器实例已创建,仅显示“Started”状态。正常事件流程为Pulling-->Pulled-->Created-->Started,缺失“Created”环节。
- 未接入Azure Log Analytics时无法查看容器日志,Azure门户容器边栏的“日志”标签页仅显示
No logs available,正常情况下成功运行的容器可直接查看日志。 - 问题发生时会执行两次镜像拉取操作,且两次均显示拉取成功,相关事件截图如下:

- 部分场景下门户会额外出现第4条“Killed”事件。
运行背景
通过Logic Apps的Azure Container Instance连接器创建单容器容器组,该流程已在多个自动化工作流中稳定运行。Logic Apps会监控容器组状态,拉取实例日志后在任务完成时删除容器组。所有镜像均托管在Azure Container Registry中,容器内的Python代码会从SQL拉取数据、生成PDF报告并上传到Azure Blob。
可以确认代码运行成功,因为最终报告会正常上传到Blob;同时已为容器接入Log Analytics,可以看到内部Python日志,Log Analytics未上报其他错误。但Logic Apps拉取容器日志时会因找不到日志返回失败。
日志分析特征
Log Analytics导出的容器事件比门户事件更详细,异常表现为:第一次镜像拉取成功10秒后会再次触发拉取操作,第一个容器实际运行成功并以退出码0结束,随后残留的孤儿容器会被杀死。
关键异常特征
问题发生时有一个高度一致的特征:
- 正常创建容器时,拉取镜像的事件消息会显示通过标签拉取,格式为
myregistry.azurecr.io/riptuskimage:1.2.5 - 问题发生时,事件消息会显示通过摘要拉取镜像,格式为
myregistry.azurecr.io/riptuskimage@shah256:d98fja...
所有问题发生的场景下均存在该特征,创建请求中已明确指定了镜像标签,不清楚Azure为何会切换为摘要拉取。
已排查内容
已查阅公开社区相关帖子,均未找到有效解决方案。
目前怀疑问题与容器注册表有关:使用的镜像体积约1.6GB,对照容器注册表限流规则,单次拉取1.6GB镜像应该不会触发限流,但ACI容器创建流程没有提供查看注册表是否返回429 HTTP错误的途径,问题发生时也没有其他拉取操作占用资源。
补充说明
该问题为近期才出现,Logic Apps相关流程已稳定运行超过1年,仅在最近几周(发帖时间2021年9月24日)才开始发生。
内容的提问来源于stack exchange,提问作者riptusk331

