我可以从Windows 2016上托管的Docker在dotnet core 3.0应用上运行dotnetcore吗?

问题描述 投票:0回答:1

[我正在尝试在运行OS w2016的生产服务器上以dotnet Core 3.0打包运行在docker映像中的应用程序。

[当我在服务器上运行docker映像时,出现此不兼容的映像错误:

a Windows version 10.0.17763-based image is incompatible with a 10.0.14393 host

据我了解,我需要使用与目标主机兼容的基础映像来构建映像。因此,我需要寻找1607基本图像。问题是,我找不到针对该服务器版本的dotnet Core 3.0的映像。

W2016是最近的,docker应该允许在每台服务器上运行,所以我在这里缺少什么?

为清楚起见,这里我正在尝试写入dockerfile:

#this image not exists for os version 1607
FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1607  AS base
WORKDIR /app

#this image not exists for os version 1607
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1607  AS build
WORKDIR /src
COPY ["ConsoleApp7/ConsoleApp7.csproj", "ConsoleApp7/"]
RUN dotnet restore "ConsoleApp7/ConsoleApp7.csproj"
COPY . .
WORKDIR "/src/ConsoleApp7"
RUN dotnet build "ConsoleApp7.csproj" -c Release -o /app/build

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

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

更新:

这是我的第一个docker项目,所以我可能缺少一些知识。根据此post,w2016不支持dotnet核心映像。

但是我应该能够使用hiper-v隔离运行吗?Following此官方帖子,我尝试运行

我尝试此命令:

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd

但是它失败并出现以下错误,因为仍然需要兼容的图像:

no matching manifest for windows/amd64 10.0.14393 in the manifest list entries.

Update2:

为清楚起见,错误:

a Windows version 10.0.17763-based image is incompatible with a 10.0.14393 host

为我的探路者应用程序运行基于mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1903的图像时抛出。

问题是如何打包应用程序并在Windows 2016服务器上运行

docker .net-core devops docker-for-windows nano-server
1个回答
0
投票

根据错误消息a Windows version 10.0.17763-based image is incompatible with a 10.0.14393 host,您正在将Windows版本1607作为Docker主机运行。出现此错误时,您没有提供要引用的标记,因此我将假定它是一个清单标记,例如3.0。在这种情况下,Docker将尝试将该清单标签解析为与Docker主机兼容的具体标签。由于在Windows 1607上没有针对3.0的已发布标签,您将收到此错误。

尝试通过引用不同的标签或通过Docker命令设置来实现这一目标将无济于事。 您不能使用旧版Windows来构建新版Windows的Docker映像。不管您使用什么隔离设置,都是如此。您需要将Docker主机升级到当前支持的Windows版本。当前支持的Windows版本的.NET Core运行时映像可以在以下位置找到:https://hub.docker.com/_/microsoft-dotnet-core-runtime

您还可以在此处阅读有关Windows容器版本兼容性的更多信息:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility

更新

[另一个选择是定义自己的安装.NET Core的Dockerfile。这样,您可以定义要使用的确切Windows基本映像。当官方映像未提供所需的Windows版本时,此功能很有用。由于终止支持,不再有基于1607的Nano Server版本,因此您需要使用Server Core。在这种情况下,您将使用mcr.microsoft.com/windows/servercore:1607作为基础映像,并在其之上安装.NET Core。有关如何在Dockerfile中安装.NET Core的详细说明,请参见:https://github.com/dotnet/dotnet-docker/blob/master/samples/snippets/installing-dotnet.md。一个例子是:

# escape=`

FROM mcr.microsoft.com/windows/servercore:1607
RUN powershell -Command `
        $ErrorActionPreference = 'Stop'; `
        $ProgressPreference = 'SilentlyContinue'; `
        Invoke-WebRequest `
            -UseBasicParsing `
            -Uri https://dot.net/v1/dotnet-install.ps1 `
            -OutFile dotnet-install.ps1; `
        ./dotnet-install.ps1 `
            -InstallDir '/Program Files/dotnet' `
            -Channel 3.0 `
            -Runtime dotnet; `
        Remove-Item -Force dotnet-install.ps1 `
    && setx /M PATH "%PATH%;C:\Program Files\dotnet"
© www.soinside.com 2019 - 2024. All rights reserved.