1

我使用 Visual Studio 模板创建了一个简单的 asp.net 核心 Web 应用程序。然后我创建了一个 docker 文件,如下所示:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "WebApplication.dll"]

然后我使用以下方法构建了一个图像:

docker build -t webapplication:dev .

然后使用以下命令创建并运行一个容器:

docker run -d -p 8080:80 --name myapp webapplication:dev

这一切都在本地工作。然后我尝试将其推送到 azure 容器注册表并成功推送。但是,当我尝试运行此容器的实例时,Azure 中出现错误提示“支持的 Windows 版本为:'10.0.14393,10.0.17763'”

我不明白为什么我会收到这个错误?该图像在本地工作(我可以通过浏览到 localhost:8080 并检查我是否得到了有效的响应来检查,我确实这样做了)。这与ACR有关吗?解决方法是什么?这是否与我的 Windows 版本有关(我使用的是 10.0.18363 Build 18363)我的系统是否太新而无法正常工作,这似乎不太可能?有人见过这个吗?

4

1 回答 1

1

对于 Windows 容器,主机上的操作系统版本应与容器上的操作系统版本匹配。您应该选择适当的基础映像以使您的容器能够在 Azure 上运行。 https://samcogan.com/windows-containers-and-azure状态:

操作系统版本

由于 Windows 如何实现容器运行时的限制,您需要主机运行与容器中相同版本的 Windows。我指的不仅仅是同一个家庭,而是同一个版本。因此,如果您的主机运行的是 Server 2016 v1803,那么您的容器也需要运行 Server 2016 v1803,它们不能运行 v1709。这是非常有问题的,因为这意味着在您的主机操作系统更改时重建您的图像。对于那些试图使用云提供商的人来说,问题就更大了,因为您通常不知道您托管的机器上运行的是什么操作系统。您可以通过将容器作为 HyperV 容器运行来解决此问题,HyperV 容器将您的容器包装在一个瘦虚拟机中以将其从操作系统中抽象出来,但这会增加复杂性。

于 2020-04-24T17:45:09.170 回答