Docker Сбой копирования: исходные файлы не были указаны только для одного проекта в многопроектном решении - PullRequest
0 голосов
/ 12 марта 2020

Моя структура проекта выглядит примерно так:

--Project.sln
----ProjectA.csproj
------Database
------Dockerfile
----ProjectB.csproj
--docker-compose.yml
--Dockerfile

Где ProjectA зависит и ссылается на ProjectB.

docker -compose.yml:

version: "3.7"
services:
  dotnet-backend:
    container_name: dotnet-backend
    build: ./
    env_file: .env
    links:
      - mssql-db
    ports:
      - "8000:80"
  mssql-db:
    container_name: mssql-db
    build: ./ProjectA/Database
    volumes:
     - ./Database/:/scripts/
    ports:
      - "1433:1433"

Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.sln ./
COPY ./ProjectA/*.csproj ./ProjectA/
COPY ./ProjectB/*.csproj ./ProjectB/
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .

EXPOSE 80

ENTRYPOINT ["dotnet", "ProjectA.dll"]

Теперь, когда я запускаю docker -compose up --build, я получаю эту ошибку:

Building dotnet-backend
Step 1/14 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
 ---> cfc38403c6bc
Step 2/14 : WORKDIR /app
 ---> Using cache
 ---> 6f88c69630ff
Step 3/14 : COPY *.sln ./
 ---> Using cache
 ---> a2076128c94c
Step 4/14 : COPY ./ProjectA/*.csproj ./ProjectA/
 ---> Using cache
 ---> 41fdd541e0a8
Step 5/14 : COPY ./ProjectB/*.csproj ./ProjectB/
ERROR: Service 'dotnet-backend' failed to build: COPY failed: no source files were specified

Почему COPY работает для ProjectA, но не для ProjectB ? Не берите в голову, что это говорит using cache в шаге 4, я получаю ту же ошибку при сборке в первый раз.

...