我创建了一个新的dotnetcore 5.0应用程序,并使用docker在Heroku中运行它。后来,我添加了一些项目,需要重新组织一下,所以我将主.csproj推入子文件夹中。我猜这就是我的docker部署失败的原因。这是我的原始dockerfile,它是有效的:
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build-env /app/out .
CMD ASPNETCORE_URLS=http://*:$PORT dotnet my-app.dll这是我的文件夹结构(大致)
* my-app.sln
* Dockerfile
* Api
- my-application.csproj <= main project
- Program.cs
- Startup.cs
* Application
- application.csproj <= class library
* Database
- database.csproj <= class library这是我得到的错误:
Step 3/10 : COPY *.csproj ./
COPY failed: no source files were specified我假设我已经让docker无法找到正确的文件并将它们复制到正确的位置,但我已经尝试了至少12种不同的复制和写入路径的方法,但我就是没有任何运气。有人能帮助我理解我的docker文件应该是什么样子的吗?
发布于 2021-04-12 20:54:27
新答案
我认为你也可以使用单一的Dockerfile。这就是我的多项目解决方案的样子。

我在解决方案级别提升了Dockerfile。
单独的.csproj文件位于各自的文件夹中。
Dockerfile.api文件如下所示:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["MovieAPI/MovieAPI.csproj", "MovieAPI/"]
COPY ["Models/Models.csproj", "Models/"]
COPY ["DAL/DAL.csproj", "DAL/"]
COPY ["Core/Core.csproj", "Core/"]
RUN dotnet restore "MovieAPI/MovieAPI.csproj"
COPY . .
WORKDIR "/src/MovieAPI"
RUN dotnet build "MovieAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MovieAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MovieAPI.dll"]上一个答案
经验法则:Dockerfile和.csproj文件应该处于同一级别。
当您有多个Dockerfile的多个项目和解决方案文件时,一种简单的方法是在解决方案级别创建一个docker-compose文件,在docker-compose.yml中引用Dockerfile文件,并在docker-compose.yml中使用dockerfile标记指向正确的Dockerfile。
文件夹结构:
除了.sln文件之外,还有多个docker-compose.yml,每个文件夹都有多个子文件夹,每个子文件夹都有自己的Dockerfile

docker-compose如下所示:
版本:'3.4‘
服务: sqldata: image: mcr.microsoft.com/mssql/server:2019-latest
nosqldata:图片来源: mongo
标识-接口:镜像:${REGISTRY:-eshop}/identity.api:${PLATFORM:-linux}-${TAG:-latest} build: context:。dockerfile: Services/Identity/Identity.API/Dockerfile
webhooks-客户端:图像:${REGISTRY:-eshop}/webhooks.client:${PLATFORM:-linux}-${TAG:-latest}构建:上下文:。dockerfile: Web/WebhookClient/Dockerfile
来源:
https://github.com/dotnet-architecture/eShopOnContainers
请参阅此项目的复杂安排的Dockerfile和docker-compose.yml。
https://stackoverflow.com/questions/67048404
复制相似问题