MSBUILD: ошибка MSB1009: файл проекта не существует при построении файла docker для приложения ASP. NET Core API - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать образ docker для приложения ASP. NET Core 3.1, и мне не удается восстановить пакеты. В моем решении несколько проектов, и после копирования всех файлов проекта я пытаюсь создать слой, содержащий только восстановленные зависимости.

Файл docker

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["ExampleApi/ExampleApi.csproj", "ExampleApi/ExampleApi/"]
COPY ["Common.Web/Common.Web.csproj", "ExampleApi/Common.Web/"]
COPY ["Example.Data/Example.Data.csproj", "ExampleApi/Example.Data/"]
COPY ["Example.Services/Example.Services.csproj", "ExampleApi/Example.Services/"]

RUN mkdir /tmp/build/
COPY . /tmp/build
RUN find /tmp/build -name *.csproj

RUN dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed
COPY . .
WORKDIR "/src/ExampleApi/ExampleApi"
RUN dotnet build "ExampleApi.csproj" -c Release -o /app --no-restore

FROM build AS publish
RUN dotnet publish "ExampleApi.csproj" -c Release -o /app

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

Docker build

Я работаю без кеша, чтобы иметь возможность выводить все файлы csproj в контейнере для каждого запуска (в противном случае он кэшируется и файлы больше не отображаются).

docker build --no-cache -f ExampleApi/Dockerfile .

Sending build context to Docker daemon  116.4MB
Step 1/22 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
 ---> a843e0fbe833
Step 2/22 : WORKDIR /app
 ---> Running in e33e9c821c0b
Removing intermediate container e33e9c821c0b
 ---> eec973a226e0
Step 3/22 : EXPOSE 80
 ---> Running in 8e813a3a8b85
Removing intermediate container 8e813a3a8b85
 ---> c8d95a3a1de4
Step 4/22 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
 ---> cef7866e800b
Step 5/22 : WORKDIR /src
 ---> Running in f56bf9402ed1
Removing intermediate container f56bf9402ed1
 ---> 55694332db0e
Step 6/22 : COPY ["ExampleApi/ExampleApi.csproj", "ExampleApi/ExampleApi/"]
 ---> 4beb2e169ec7
Step 7/22 : COPY ["Common.Web/Common.Web.csproj", "ExampleApi/Common.Web/"]
 ---> ed7a9c81e8f7
Step 8/22 : COPY ["Example.Data/Example.Data.csproj", "ExampleApi/Example.Data/"]
 ---> aaca52c111b4
Step 9/22 : COPY ["Example.Services/Example.Services.csproj", "ExampleApi/Example.Services/"]
 ---> efb15c17a096
Step 10/22 : RUN mkdir /tmp/build/
 ---> Running in 7da9eae324ca
Removing intermediate container 7da9eae324ca
 ---> b06126b19a7f
Step 11/22 : COPY . /tmp/build
 ---> 04598eaab98c
Step 12/22 : RUN find /tmp/build -name *.csproj
 ---> Running in 2fd26dba963d
/tmp/build/ExampleApi/ExampleApi.csproj
/tmp/build/Example.Data/Example.Data.csproj
/tmp/build/Common.Web/Common.Web.csproj
/tmp/build/Example.Sql/Example.!Sql.csproj
/tmp/build/Example.Services/Example.Services.csproj
/tmp/build/Example.Services.Tests/Example.Services.Tests.csproj
/tmp/build/Example.IdentityServer.Infrastructure/Example.IdentityServer.Infrastructure.csproj
/tmp/build/Example.IdentityServer/Example.IdentityServer.csproj
/tmp/build/Example.Data.Tests/Example.Data.Tests.csproj
/tmp/build/ExampleIntegrationApi/ExampleIntegrationApi.csproj
Removing intermediate container 2fd26dba963d
 ---> 78eadf796305
Step 13/22 : RUN dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed
 ---> Running in 5dc9b5bbd04e
MSBUILD : error MSB1009: Project file does not exist.
Switch: ExampleApi/ExampleApi.csproj
The command '/bin/sh -c dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed' returned a non-zero code: 1

find указывает, что ExampleApi/ExampleApi.csproj есть, но dotnet restore жалуется, что не находит его.

...