首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我更改了dotnet core 5应用程序的文件夹结构,现在我的dockerfile是错误的

我更改了dotnet core 5应用程序的文件夹结构,现在我的dockerfile是错误的
EN

Stack Overflow用户
提问于 2021-04-12 01:53:49
回答 1查看 86关注 0票数 0

我创建了一个新的dotnetcore 5.0应用程序,并使用docker在Heroku中运行它。后来,我添加了一些项目,需要重新组织一下,所以我将主.csproj推入子文件夹中。我猜这就是我的docker部署失败的原因。这是我的原始dockerfile,它是有效的:

代码语言:javascript
复制
    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

这是我的文件夹结构(大致)

代码语言:javascript
复制
* my-app.sln
* Dockerfile
* Api
    - my-application.csproj <= main project
    - Program.cs
    - Startup.cs
* Application
    - application.csproj <= class library
* Database
    - database.csproj <= class library

这是我得到的错误:

代码语言:javascript
复制
    Step 3/10 : COPY *.csproj ./
    
    COPY failed: no source files were specified

我假设我已经让docker无法找到正确的文件并将它们复制到正确的位置,但我已经尝试了至少12种不同的复制和写入路径的方法,但我就是没有任何运气。有人能帮助我理解我的docker文件应该是什么样子的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 20:54:27

新答案

我认为你也可以使用单一的Dockerfile。这就是我的多项目解决方案的样子。

我在解决方案级别提升了Dockerfile。

单独的.csproj文件位于各自的文件夹中。

Dockerfile.api文件如下所示:

代码语言:javascript
复制
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

请参阅此项目的复杂安排的Dockerfiledocker-compose.yml

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67048404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档