到 Azure ACI 的基本容器化 ASP.NET 3.1 Core 应用部署失败

Posted

技术标签:

【中文标题】到 Azure ACI 的基本容器化 ASP.NET 3.1 Core 应用部署失败【英文标题】:Basic containerised ASP.NET 3.1 Core app deployment to Azure ACI fails 【发布时间】:2020-11-12 19:08:57 【问题描述】:

我正在尝试将容器化的 ASP.NET Core 3.1 应用程序部署到 Azure Azure 容器实例 (ACI)。

该应用是全新创建的 Visual Studio 2019 Asp.NET Core Web 应用,支持 Docker。 它在本地构建和运行良好。

使用 Visual Studio 2019 中的发布向导在 Azure 容器注册表 (ACR) 中发布也成功。

当我尝试使用该映像(通过门户)将容器启动到 Azure 容器实例时,问题就出现了。这失败并出现以下错误:


"code":"DeploymentFailed",
"message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.",
"details":[
 "code":"BadRequest",
 "message":"
  \"error\": 
  \"code\": \"UnsupportedWindo wsVersion\",
  \"message\": \"Unsupported windows image version. Supported versions are 'Windows Server 2016 - Before 2B, Windows Server 2019 - Before 2B, Windows Server 2016 - After 2B, Windows Server 2019 - After 2B'\"
 
 "
]

在 DOCKERFILE 下方(与 Visual Studio 模板无关)

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build
WORKDIR /src
COPY ["WebApplication2/WebApplication2.csproj", "WebApplication2/"]
RUN dotnet restore "WebApplication2/WebApplication2.csproj"
COPY . .
WORKDIR "/src/WebApplication2"
RUN dotnet build "WebApplication2.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication2.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication2.dll"]

我希望作为一个全新的 Visual Studio 应用程序,我不需要进行任何更改即可使其正常工作,但似乎并非如此。我应该怎么做才能解决这个问题?


更新 1:

更改 DOCKERFILE 1903 -> 1909

docker 检查图像:

   "Os": "windows",

   "OsVersion": "10.0.18363.959",

结果:没有变化,同样的错误信息


更新 2:

更改了 DOCKERFILE 1903 -> 2004

结果:Visual Studio 无法构建启动 (F5) 项目并出现以下错误:

错误 CTC1014 Docker 命令失败,退出代码为 1。 基于 Windows 版本 10.0.19041 的映像与 10.0.18363 主机 WebApplication2 C:\temp\WebApplication2\WebApplication2\Dockerfile 1 不兼容

新的 DOCKERFILE:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-2004 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-2004 AS build
WORKDIR /src
COPY ["WebApplication2/WebApplication2.csproj", "WebApplication2/"]
RUN dotnet restore "WebApplication2/WebApplication2.csproj"
COPY . .
WORKDIR "/src/WebApplication2"
RUN dotnet build "WebApplication2.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication2.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication2.dll"]

【问题讨论】:

在这里查看可用版本hub.docker.com/_/microsoft-windows-nanoserver,并尝试其他版本。 我也有同样的问题。根据文档,我尝试了许多版本都在 2B 之后,但没有运气。你能弄明白吗? 这有什么更新吗? @AR你能解决这个问题吗? 【参考方案1】:

它对“2B 之前”和“2B 之后”感到满意,但“2B”。 Per MS 图像 (2B) 中有一个重大变化,后来被修复。

您是否可能在 2 月初就已经提取了这张图片?如果是这样,那么您可能正在发布该损坏的版本。尝试运行docker inspect <image_id> 并查看操作系统版本是否至少“10.0.18362.719”。如果没有,您可以删除该图像并提取新副本。

或者,您可以在 Dockerfile 中将“1903”都更改为“1909”或“2004”,然后尝试获取“2B”之后的更新版本的 nanoserver。

【讨论】:

我已经完成了你建议的所有步骤,我什至确保我使用的图像版本是 2B 后的,我仍然得到同样的错误。

以上是关于到 Azure ACI 的基本容器化 ASP.NET 3.1 Core 应用部署失败的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MarkLogic docker hub 映像部署到 Azure 容器实例 ACI

Azure容器实例未连接kafka集群

Azure Fileshare - 使用 Docker-Compose 将不同的子文件夹/文件挂载到 ACI 上的卷

是否可以将 Azure 文件共享中的单个文件/文件夹挂载到 Azure 容器实例

在从 blob 存储中获取文件并传递给模型进行预测时出现 azure aci webservice 的超时错误

浅谈AKS,ACR,ACI