Docker复制失败:没有为多项目解决方案中的一个项目指定源文件

Docker复制失败:没有为多项目解决方案中的一个项目指定源文件,docker,.net-core,docker-compose,dockerfile,Docker,.net Core,Docker Compose,Dockerfile,我的项目结构如下: --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-back

我的项目结构如下:

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

为什么复制适用于ProjectA,而不适用于ProjectB?不要介意它在第4步中说
使用缓存
,我在第一次构建时也会遇到同样的错误。

对于遇到类似问题的任何人,我能够在docker-compose.yml文件中包含
上下文
dockerfile
后解决它

以前Docker Compose无法找到复制命令的文件。以下是修复方法:

services:
  webservice:
    build:
      context: ../             # your path to context
      dockerfile: ./Dockerfile # path relative to context

根据您的文件树,您有ProjectB.csproj,它是一个目录吗?但在Dockerfile中,您复制的是ProjectB(
COPY./ProjectB/*.csproj./ProjectB/
)目录的内容,而不是ProjectB.csproj。另外,您确定ProjectB目录中有.csproj文件吗?对于命令
COPY./ProjectB/*.csproj./ProjectB/
,请确保文件夹名称正确(注意区分大小写)