docker-compose up failes: текущий .NET SDK не поддерживает таргетинг на .NET Core 2.2 - PullRequest
0 голосов
/ 14 марта 2019

У меня есть приложение .net core, которое dockerized. Внутри файла docker compose ниже приведены сведения об этом контейнере. docker-compose up из 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"
        .....

Dockerfile

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"] 

enter image description here

enter image description here

dotnet - версия

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

1 Ответ

1 голос
/ 14 марта 2019

Во-первых, важный момент:

Версии .NET Core, установленные в Windows, не имеют значения, когда дело доходит до док-контейнера.Все, что 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.

(Помните, что версия .NET Core SDK, обычно устанавливаемая в Windows, не имеет значения дляdocker?)

Так какую версию SDK вы используете внутри контейнера Docker?Посмотрите на Dockerfile еще раз:

FROM microsoft/aspnetcore-build:2.0 AS build

Вы используете .NET Core SDK, который поддерживает ASP.NET Core 2.0.Другими словами, вы используете .NET Core SDK 2.0, и он поддерживает только целевой .NET Core 2.0.Вам нужно переключиться на SDK, который поддерживает .NET Core 2.2.

Измените 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...