Как собрать ядро ​​dotnet в Docker?

Привет, я пытаюсь создать приложение dotnet core 2.1 с помощью докера. Всякий раз, когда я создаю шаблон шаблона проекта, создается файл докера по умолчанию. Этот файл докера работает нормально, но всякий раз, когда я хочу загрузить его в ECR, это не сработает. Поэтому я изменил файл докера, как показано ниже.

FROM microsoft/dotnet:2.1-sdk AS build
ENV ASPNETCORE_URLS http://*:44319
EXPOSE 44319
WORKDIR /src
COPY ["LocationServicesAPI/LocationServicesAPI.csproj", "LocationServicesAPI/"]
RUN dotnet restore "LocationServicesAPI/LocationServicesAPI.csproj"
WORKDIR /app/LocationServicesAPI
COPY . .
RUN dotnet build "LocationServicesAPI.csproj" -c Release -o /app

Всякий раз, когда я запускаю с помощью Docker, я получаю следующую ошибку.

1>Step 9/19 : EXPOSE 44319
1> ---> Using cache
1> ---> 069a0777f156
1>Step 10/19 : WORKDIR /src
1> ---> Using cache
1> ---> 6e9768b88723
1>Step 11/19 : COPY ["LocationServicesAPI/LocationServicesAPI.csproj", "LocationServicesAPI/"]
1> ---> Using cache
1> ---> 37b9e63b9b97
1>Step 12/19 : RUN dotnet restore "LocationServicesAPI/LocationServicesAPI.csproj"
1> ---> Using cache
1>Step 13/19 : WORKDIR /app/LocationServicesAPI
1> ---> f505d07f4d8c
1> ---> Using cache
1> ---> e03aaf3a0d7d
1>Step 14/19 : COPY . .
1> ---> 20b8bb0d74bd
1>Step 15/19 : RUN dotnet build "LocationServicesAPI.csproj" -c Release -o /app
1> ---> Running in f04182972995
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>
1>Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core
1>MSBUILD : error MSB1009: Project file does not exist.
1>Switch: LocationServicesAPI.csproj
1>Removing intermediate container f04182972995
1>The command '/bin/sh -c dotnet build "LocationServicesAPI.csproj" -c Release -o /app' returned a non-zero code: 1
1>C:\Users\ngodbole\Documents\MerchWebServices\LocationServicesAPI\LocationServicesAPI\Dockerfile : error CTC1014: Docker command failed with exit code 1.
1>C:\Users\ngodbole\Documents\MerchWebServices\LocationServicesAPI\LocationServicesAPI\Dockerfile : error CTC1014: The command '/bin/sh -c dotnet build "LocationServicesAPI.csproj" -c Release -o /app' returned a non-zero code: 1
1>Done building project "LocationServicesAPI.csproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ниже ошибка, которую я получаю после исправления пути.

1> ---> cc58805dac5d
1>Step 14/19 : COPY . .
1> ---> ced094b3788d
1>Step 15/19 : RUN dotnet build LocationServicesAPI.csproj -c Release -o /app
1> ---> Running in 290429a9f4d1
1>Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>
1>Switch: LocationServicesAPI.csproj
1>MSBUILD : error MSB1009: Project file does not exist.

Я не могу понять это. Может ли кто-нибудь помочь мне исправить это? Любая помощь будет оценена по достоинству. Спасибо


person Niranjan    schedule 22.10.2019    source источник


Ответы (1)


В вашем Dockerfile вы копируете код не в ту папку:

WORKDIR /src
COPY ["LocationServicesAPI/LocationServicesAPI.csproj", "LocationServicesAPI/"]
RUN dotnet restore "LocationServicesAPI/LocationServicesAPI.csproj"

WORKDIR /app/LocationServicesAPI

COPY . .
RUN dotnet build "LocationServicesAPI.csproj" -c Release -o /app

Вторая команда WORKDIR должна быть:

WORKDIR /src/LocationServicesAPI

Это гарантирует, что вы скопируете исходный код в ту же папку, что и .csproj.

ИЗМЕНИТЬ

Вам нужно переместить WORKDIR /src/LocationServicesAPI после команды COPY, чтобы команда build выполнялась в той же папке, что и .csproj

WORKDIR /src
COPY ["LocationServicesAPI/LocationServicesAPI.csproj", "LocationServicesAPI/"]
RUN dotnet restore "LocationServicesAPI/LocationServicesAPI.csproj"
COPY . .

WORKDIR /src/LocationServicesAPI

RUN dotnet build "LocationServicesAPI.csproj" -c Release -o /app
person Simply Ged    schedule 22.10.2019
comment
Спасибо, я пропустил это. Я изменил это. Но теперь я начал получать другую ошибку. Я опубликую это выше. - person Niranjan; 22.10.2019
comment
@Niranjan у тебя есть какое-нибудь решение ?? - person Shrirang; 27.01.2020