创建了一个简单的.net核心应用程序。尝试运行docker build
,但我得到了:
“清单中没有适用于Windows / amd64 10.0.14393的清单 列出条目”
Docker文件:
FROM microsoft/dotnet:sdk 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 microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "HelloWorld.dll"]
采取2: 尝试过vs2019,创建了新的MVC应用=>添加Docker支持(Windows)Dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-nanoserver-1809 AS build
WORKDIR /src
COPY ["coremvc.csproj", ""]
RUN dotnet restore "./coremvc.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "coremvc.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "coremvc.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "coremvc.dll"]
现在得到:
基于Windows版本10.0.17763的映像与以下版本不兼容: 10.0.14393主机
服务器上安装的Docker:
名称版本 ---- ------- Docker 19.03.2
为什么我不能在Windows Server 2016上运行它们?在本地Windows 10上运行良好
答案 0 :(得分:1)
对于Windows映像,在确定应使用哪个映像标签时,Docker主机的Windows版本至关重要。
对于第一个错误:no matching manifest for windows/amd64 10.0.14393 in the manifest list entries
,当使用没有与您的Docker主机的OS版本/体系结构匹配的具体标签的多体系结构标签时,会发生此错误。我不确定是哪个标签引起了错误,但我猜想是microsoft/dotnet:aspnetcore-runtime
。这是一个多体系结构标签,Docker将查看您的主机信息,以将该标签解析为特定于OS版本/体系结构的具体标签。在这种情况下,您的主机版本10.0.14393没有可用的标签。
对于第二个错误:a Windows version 10.0.17763-based image is incompatible with a 10.0.14393 host
,在这种情况下,您使用的是Windows版本特定的标记,因此此处无需解析。您在明确说明所需的Windows版本。问题是您要使用的Windows版本高于Docker主机使用的Windows版本。那是不可能的。您只能使用相同或更低的版本(并且您只能根据特定条件使用较低的版本:https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility)。
Windows Server 2016没有可用的任何受支持的.NET Core映像。有关当前标签列表,请参见此处:https://hub.docker.com/_/microsoft-dotnet-core-sdk。如果您能够使用Windows Server 1803或更高版本,那就应该不错。