【问题标题】:Can I run dotnetcore on dotnet core 3.0 app from a docker hosted on a windows 2016?我可以从 Windows 2016 上托管的 docker 在 dotnet core 3.0 应用程序上运行 dotnetcore 吗?
【发布时间】:2019-12-02 11:46:53
【问题描述】:

我正在尝试在运行 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 base images 。 问题是,我找不到针对该服务器版本的 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 dotnet core image is not supported on w2016.

但是我应该能够使用 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.

更新2:

为清楚起见,错误:

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】:

    根据错误消息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

    更新

    另一种选择是定义您自己的 Dockerfile 来安装 .NET Core。这样,您就可以定义要使用的确切 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"
    

    【讨论】:

    • 如果我理解正确 1) 没有图像可以为 windows 2016 主机运行 dotnet core,2) 我无法运行版本取代主机版本的图像,所以我没有办法在 Windows Server 2016 上托管的 docker 容器上运行 dotnet 核心应用程序?
    • 基本上,是的。但我已经更新了我的答案以包含另一个选项,该选项涉及创作使用 1607 基础映像并手动安装 .NET Core 的 Dockerfile。
    • 谢谢。我尝试使用您的 dockerfile 进行构建,但出现错误:来自守护进程的错误响应:Dockerfile 解析错误第 27 行:未知指令:$ERRORACTIONPREFERENCE。我对powershell的了解还不够,无法找出问题
    • 发现了。我的 docker 文件没有以注释 # escape= ´ 开头
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2018-11-27
    • 2012-12-01
    相关资源
    最近更新 更多