Моя структура проекта выглядит примерно так:
--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, я получаю ту же ошибку при сборке в первый раз.