无法在azure容器注册表上运行docker映像的实例

时间:2020-04-24 16:46:56

标签: azure docker azure-container-registry

我已经使用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上),我的系统是否太新而无法正常工作?有人看到了吗?

1 个答案:

答案 0 :(得分:1)

对于Windows容器,主机上的OS版本应与容器上的OS版本相匹配。您应该选择一个适当的基础映像,以使您的容器能够在Azure上运行。 https://samcogan.com/windows-containers-and-azure声明:

操作系统版本

由于Windows实施容器运行时间的方式受到限制,因此您需要主机运行与容器中相同版本的Windows。我不仅指同一个家庭,而且是同一个版本。因此,如果主机正在运行Server 2016 v1803,则您的容器也需要运行Server 2016 v1803,它们不能运行v1709。这是非常有问题的,因为这意味着您的主机操作系统每次更改都会重建映像。对于那些尝试使用云提供程序的人来说,问题甚至更大,因为通常您不知道托管的计算机上正在运行什么操作系统。 您可以通过将容器作为HyperV容器运行来解决此问题,该容器将容器包装在瘦虚拟机中以从OS中抽象出来,但这会增加复杂性。

相关问题