繁体   English   中英

docker-compose up 失败:当前 .NET SDK 不支持面向 .NET Core 2.2

[英]docker-compose up failes: The current .NET SDK does not support targeting .NET Core 2.2

我有一个 .net 核心应用程序,它是 dockerized 在下面的 docker compose 文件中,有这个容器的详细信息 docker -compose up from windows cli 产生以下错误

Step 11/20 : RUN dotnet restore My.Api/My.Api.csproj
 ---> Running in bc9d0ee76a7e
/usr/share/dotnet/sdk/2.1.202/Sdks/Microsoft.NET.Sdk/build/Microsoft.NET.TargetFrameworkInference.targets(135,5): error : The current .NET SDK does not support targeting .NET Core 2.2.  Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.2. [/src/My.Api/My.Api.csproj]
ERROR: Service 'my.api' failed to build: The command '/bin/sh -c dotnet restore My.Api/My.Api.csproj' returned a non-zero code: 1

docker-compose.yml

version: '3.4'

networks:
    frontend:
    backend:

services:
    my.api:
        image: ${DOCKER_REGISTRY}myapi        
        build:
            context: .
            dockerfile: My.Api/Dockerfile  
        ports:
            - "5000:80"
        networks:
            - backend
            - frontend
        depends_on:
            - mssqlserver

    mssqlserver:
        image: "microsoft/mssql-server-linux:latest"
        .....

文件

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src

COPY My.Api/
RUN dotnet restore My.Api.csproj
COPY . .
WORKDIR /src/My.Api
RUN dotnet build My.Api.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish My.Api.csproj -c Release -o /app

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

在此处输入图片说明

在此处输入图片说明

dotnet --version

2.2.105

更新:

当我将 Dockerfile 更改为使用 microsoft/aspnetcore:2.2 而不是 microsoft/aspnetcore:2.0 时,我得到了

Step 1/20 : FROM microsoft/aspnetcore:2.2 AS base
ERROR: Service 'my.api' failed to build: manifest for microsoft/aspnetcore:2.2 not found

首先,很重要的一点:

对于 docker 容器,Windows 中安装的 .NET Core 版本无关紧要。 无论dotnet --version在 Windows 中说什么都无关紧要。 docker 容器是一个独立于 Windows 环境的环境。 它实际上运行不同的用户空间(Linux,而不是 Windows)。 它可以安装一组完全不同的程序和版本。

现在,回过头来,错误说:

error : The current .NET SDK does not support targeting .NET Core 2.2.  Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.2

此错误消息的最后一部分非常重要。 它告诉您问题:您使用的 .NET Core SDK(在 docker 容器内)无法针对 2.2。

(还记得 Windows 中通常安装的 .NET Core SDK 版本与 docker 无关吗?)

那么您在 docker 容器中使用的是那个版本的 SDK? 再次查看Dockerfile

FROM microsoft/aspnetcore-build:2.0 AS build

您正在使用支持 ASP.NET Core 2.0 的 .NET Core SDK。 换句话说,您使用的是 .NET Core SDK 2.0,它只支持定位 .NET Core 2.0。 您需要切换到支持 .NET Core 2.2 的 SDK。

FROM microsoft/aspnetcore:2.0 AS base更改为FROM microsoft/aspnetcore:2.2 AS base并将FROM microsoft/aspnetcore-build:2.0 AS build更改为FROM microsoft/aspnetcore-build:2.2 AS build

这将为您提供一个 SDK,让您可以面向 .NET Core 2.2。

编辑:啊,对了。 我错过了一些东西。

此处描述了Microsoft 容器映像 您需要使用microsoft/dotnet:2.2-sdk进行构建( FROM microsoft/dotnet:2.2-sdk AS build )和microsoft/dotnet:2.2-aspnetcore-runtime进行运行( FROM microsoft/dotnet:2.2-aspnetcore-runtime as base )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM