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/
,请确保文件夹名称正确(注意区分大小写)