我已经努力了一周多的时间,想要让 Windows 容器与 Azure 应用服务一起运行。我最初的偏好是只使用标准容器实例,但看起来你只有公共或私有网络的选项,而不是自定义网络(与 Linux 容器不同)。看起来如果你在应用服务中运行 Windows 容器,你将获得与其他网站相同的网络选项。Azure 对应用服务中 Windows 容器的支持是快一岁了,但除了非常基本的场景外,很少有资源解决这个问题。
我使用容器的目的是按需运行第三方后台 Windows 服务,而无需虚拟机的开销。由于它使用的是应用服务,我决定添加一个 asp.net core rest 端点以获取一些状态信息。我的容器基于mcr.microsoft.com/windows/servercore:ltsc2019
。我下载并安装 .net 和 asp.net core(基本映像只有 .net 框架),安装我的服务,构建并运行网站,然后我的入口点是一个 Powershell 脚本,它更新一些配置值并运行管理服务的 asp.net core 端点。
如果我使用门户,我可以选择容器与代码、Windows 与 Linux 的选项,然后开始基本快速启动图像,但我在 Azure 容器注册表中的映像无法正常启动。我正在使用支持的基础映像,它在我的本地机器上运行良好。在 Azure 上,它创建了所有内容,但从未启动过。少量日志记录表明它启动了它,挂载了文件共享卷,然后基本上就死机了:
- 为图像创建容器
- 尝试启动容器
- 启动容器成功
- 容器已启动
- 调用配置容器实用程序
- 配置容器实用程序已完成
- 容器已启动
- 尝试停止容器
- 尝试终止容器
- 尝试移除容器
- 容器移除成功
同样奇怪的是,即使使用快速启动映像,我也看不到实际的容器实例。大概这是因为它直接在应用服务计划中运行,尽管这些都不是很清楚。从 Web 应用程序,我可以转到应用服务计划(Windows 容器计划),在“应用程序”下,它显示一个类型为“应用程序、容器、窗口”的单个应用程序,但我找不到任何地方可以查看控制台日志或运行 shell,就像使用容器映像类型的资源一样。在我遇到的一些屏幕截图中,我可以在“设置”下看到一个“容器设置”链接,但我没有,但出于某种原因,也许这仅适用于 Linux 容器。
那么,在应用服务中运行时,我应该如何排查容器问题?我是否遗漏了什么?
答案1
诊断
单击Diagnose & Solve Problems -> Container Initialization
Azure Web App for Containers 即可找到有价值的调试信息。
捻角羚
App Service 附带一个调试控制台,可用于调试、探索、上传文件以及用于获取有关环境的信息的 JSON 端点。此控制台称为 Kudu 控制台或应用的 SCM 仪表板。
您可以通过链接 https:// 访问此仪表板[您的应用名称].scm.azurewebsites.net/。
Kudu 提供的一些功能包括:
- 应用程序日志流诊断转储调试控制台的环境设置,您可以在其中运行 PowerShell cmdlet 和基本 DOS 命令。
https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-performance-degradation