Azure 应用服务泊坞窗容器“服务不可用”

Posted

技术标签:

【中文标题】Azure 应用服务泊坞窗容器“服务不可用”【英文标题】:Azure app service docker container 'Service Unavailable' 【发布时间】:2018-02-06 23:10:37 【问题描述】:

我已按照教程将 .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 容器注册表。 【参考方案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 日志,并根据确切的错误(通常是缺少的依赖项)寻找解决方案。

【讨论】:

以上是关于Azure 应用服务泊坞窗容器“服务不可用”的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 泊坞窗错误

多容器泊坞窗(AWS)链接是单向的吗?

sh [下载并设置HDF 3.0泊坞窗容器]使用此脚本下载并设置HDF泊坞窗容器#hdf #docker #setup#hdf30

泊坞窗容器怎样才能在没有主机操作系统的安装份额完全访问Windows共享?

从容器内部构建并推送泊坞窗图像

如何优雅地分离无限睡眠泊坞窗以及为啥