簡體   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