为什么 Azure 双重拉取我的图像和结果容器的 "losing track"?

Why is Azure double-pulling my image & "losing track" of the resulting container?

我在 ACI 上遇到 运行ning 容器的偶发问题,这似乎导致 Azure“失去对我的容器实例的跟踪”并导致孤立容器。我的容器总是 运行 成功,但时不时地我会遇到这个奇怪的问题。一些特点:

我正在通过 Logic Apps 的 Azure Container Instance 连接器创建一个单一容器容器组 - 我为许多自动化工作流程可靠地执行此操作。逻辑应用监视容器组的状态,提取实例的日志,然后在完成后删除该组。我的所有图像都托管在 Azure 容器注册表中。容器内的 Python 代码从 SQL 中提取数据,生成 PDF 报告,然后 post 将其存储在 Azure Blob 上。我知道代码是 running/succeeding 因为我可以看到正在 post 编辑的报告!我还将 Log Analytics 连接到容器,因此我可以看到我的内部 python 日志记录。我没有看到 Log Analytics 报告的其他错误。虽然当我尝试拉取容器日志时我在逻辑应用程序中遇到了失败但找不到它们(请参阅上面的要点 2)。

这是容器事件日志分析的输出(上面屏幕截图的更详细版本)- 非常奇怪,容器在第一个成功拉取后 10 秒后重新拉回。然后你可以看到我的第一个容器实际上 运行s 成功并以 0 退出,然后我们留下这个被杀死的孤立容器。

当出现此问题时,我注意到一件事非常一致。通常,当我在 Azure 中查看成功的容器创建事件时,事件消息指定它正在通过其标签拉取我的图像:myregistry.azurecr.io/riptuskimage:1.2.5。发生此问题时,事件消息指定图像是由其摘要提取的:myregistry.azurecr.io/riptuskimage@shah256:d98fja...。每次出现问题时,我都会注意到这一点。我不知道 Azure 为什么要这样做。我肯定会在创建请求中指定标签。

我看过 post and this post 但都没有帮助。

我一直在为这个问题摸不着头脑。事实上,它是零星的(并不总是发生),当它确实拉取两次图像时,我怀疑它与我的容器注册表有关。我拉的图像很大——大约 1.6GB。我检查了 container registry's throttle limits 并且我认为单次拉取 1.6GB 图像不应该最终受到限制 - 但是 ACI 容器创建并没有真正给我一种方法来查看注册表是否返回 429 HTTP错误。那个时候我什么都不拉。

有人有什么想法吗?谢谢!

编辑:这是最近的现象!我有逻辑应用程序创建容器已经一年多了,这个问题最近几周才开始出现(截至 2021 年 9 月 24 日 post)

当您的容器在 Azure 容器实例中无法正常工作时,首先使用 az container logs 查看其日志,然后使用 az container attach 流式传输其标准输出和标准错误。

az container attach 命令在容器启动期间提供诊断信息。

另请查看 Azure 容器实例资源提供程序提供的诊断信息。要查看容器的事件,运行 az container show 命令。

这样你的第一个问题就解决了。查看此 document 了解更多信息。

Azure 正在从 Azure 容器注册表中两次拉取容器映像,因为容器需要很长时间才能启动。由于 Azure 容器实例按需拉取容器映像,因此您看到的启动时间与其大小直接相关。影响 Azure 容器实例中容器启动时间的一个因素是 图像大小

查看此 document 了解更多信息。

您可以通过在逻辑应用中从注册表中拉取映像后添加延迟来解决此问题。