【问题标题】:Azure app service docker container 'Service Unavailable'Azure 应用服务泊坞窗容器“服务不可用”
【发布时间】:2023-12-24 05:21:01
【问题描述】:

我已按照教程将 .net 核心 Web 应用程序构建到 docker 映像中,发布到 azure 容器注册表,然后我设置了我的 VSTS 发布模板以将容器部署到应用程序服务。

这一切似乎都有效,我可以在容器注册表中查看我的图像,并且部署似乎成功 - 但是当导航到应用服务站点时,我得到的只是 HTTP 503 - 服务不可用。

应用服务已启动,我可以通过 bash 在我的文件系统中看到部署 - 所以我想知道我是否遗漏了什么?

我的任何模板中都没有“启动”命令,我想知道是不是这样?

该站点在 VS2017 中完美运行,包括通过 docker 进行调试,所以它实际上只是一个案例......我如何让应用服务实际加载和执行图像?

谢谢!

编辑

除此之外,我还可以访问 docker 诊断日志,该日志声称“无法在此平台上使用映像操作系统“windows””。

我的基础镜像是 microsoft/aspnetcore:2.0 镜像,它在我的开发环境中的 linux 容器上运行得非常好......但在 Linux 应用服务中似乎不起作用?

aspnetcore:2.0 基础镜像不适合linux应用服务吗?

【问题讨论】:

  • 除此之外,我还可以访问声称“无法在此平台上使用映像操作系统“windows”的诊断日志。我的基本映像是 microsoft/aspnetcore:2.0 映像,它运行在我的开发环境中我的 linux 容器上非常好......但似乎在 Linux 应用服务中不起作用?
  • 你能分享你关注的教程链接吗?
  • 我按照各种方法将旅程拼凑在一起,但为了开始我的构建和发布模板,我使用了 Azure 门户持续交付刀片,然后修改为使用 Azure 容器注册表。

标签: azure docker azure-web-app-service azure-pipelines-release-pipeline azure-container-registry


【解决方案1】:

我这周终于解决了,希望答案对其他人有所帮助。

当使用 VSTS 托管构建代理生成运行 docker base microsoft/aspnetcore:latest 的映像时 - 除非您使用(Linux 预览版)托管构建代理,否则您将生成一个不会在 linux 上运行的 windows 容器应用服务。

切换到使用托管 linux 构建代理后,容器成功加载,我的问题得到解决。

【讨论】:

  • 这很有帮助!对于其他来这里的人,可以在 Kudu 中找到 docker 日志:YOURSITE.scm.azurewebsites.net 并单击“docker logs”。这将打开一个 JSON 文件;将链接复制粘贴到 JSON 文件中。
  • @lionello 非常感谢您的留言。它拯救了我的一天!
  • @watdo 所以如果我的 VSTS 正在构建一个 ASP.NET "microsoft/aspnet" 映像,它不适用于 Azure Web App for Containers,对吧?那我应该用什么?
  • @Hazz - 我相信只有 .net 核心发行版才能在 Azure 应用服务中运行,因为底层主机是 linux(至少当我使用它们时它似乎是......) - 所以你会需要使用microsoft/aspnetcore。如果他们在应用服务中添加了对基于 Windows Server 2016 的容器的支持,那么它将起作用。我相信这会在某个时候出现,但不相信它还在那里。我已经转而使用 Azure 容器服务,但这也是 Linux 上的 Kubernetes,用于基于 Windows 的容器,我认为你需要构建自己的 docker 主机。
【解决方案2】:

同样错误信息的另一种解决方案:

尝试使用 microsoft/aspnetcore(没有标签/版本:2.0)作为图像。如果这不起作用,请检查上面提到的 docker 日志,并根据确切的错误(通常是缺少的依赖项)寻找解决方案。

【讨论】: