使用多项目解决scheme的ASP.NET 5:docker构build

我正在尝试创build一个由4个项目组成的ASP.NET 5解决scheme的映像。 这里是结构:

  • FlashTools(ASP.NET 5类库)
  • 模型(ASP.NET 5类库)
  • QuizzCorrector(ASP.NET 5 Web应用程序)
  • QuizzService(ASP.NET 5类库)

我有一个简单的Dockerfile,看起来像这样:

FROM microsoft/aspnet COPY . /app WORKDIR /app RUN ["kpm", "restore"] EXPOSE 5004 ENTRYPOINT ["k", "kestrel"] 

但不知道把它放在哪里。 在我的解决scheme的根文件夹中的global.json是或在我的Web应用程序文件夹中,我的project.json是? 当然,我已经修改它取决于这个文件的位置。

无论如何,这似乎工作,因为它下载我运行命令时所需的所有库

dockerbuild设-t quizzcorrector。

我的问题是,docker告诉我

无法findModels> = 1.0.0

无法findFlashTools> = 1.0.0

无法findQuizzService> = 1.0.0

我在这个主题https://github.com/aspnet/aspnet-docker/issues/19上看到,在多项目解决scheme中,我们应该运行“kpm pack”命令将我的应用程序打包为可部署且可运行的表单。

我找不到任何使用kpm pack命令的Dockerfiles示例,只有以下文档: https : //github.com/aspnet/Home/wiki/Package-Manager

我也尝试过在我的Dockerfile中使用ADDCOPY命令来将我的项目的内容复制到容器的文件系统中,但仍然是同样的错误。

感谢帮助我

可能会迟到,但是我要回答这个问题,那些仍在努力工作的人。 您需要在解决scheme级别创build一个Dockerfile。 然后,您需要更新您的工作文件夹以使用Web项目所在的那个文件夹。 下面是最后的Dockerfile,考虑到kpmk实用程序被一个dotnet工具所取代。

 FROM microsoft/dotnet:latest COPY . /app WORKDIR /app/src/QuizzCorrector RUN ["dotnet", "restore"] EXPOSE 5004 ENTRYPOINT ["dotnet", "run"] 

为了能够在ASP.NET CORE 1.0的DockerHub中构build和运行多个xprojects,我得到了类似的问题。 这导致我在这里,帮助我。 我的解决scheme是:

解决scheme结构

 ``` Root │ AuthenticationService.sln │ Dockerfile │ └───src │ │ │ └───AuthenticationService │ └───DataAccess │ └───EntityDataModels │ └───Services . 

Dockerfile:

 FROM microsoft/dotnet:latest COPY . /app WORKDIR /app/src/AuthenticationService RUN ["dotnet", "restore"] WORKDIR /app/src/DataAccess RUN ["dotnet", "restore"] WORKDIR /app/src/EntityDataModels RUN ["dotnet", "restore"] WORKDIR /app/src/Services RUN ["dotnet", "restore"] WORKDIR /app/src/AuthenticationService RUN ["dotnet", "build"] EXPOSE 5000/tcp ENV ASPNETCORE_URLS http://*:5000 ENTRYPOINT ["dotnet", "run"] 

对于未来的参考和任何人有同样的问题。 微软在这里发布了一个Docker容器dotnet-architecture / eShopOnContainers项目的示例dotnet核心应用程序

您可以参考链接或find下面的例子

例如:

 FROM microsoft/aspnetcore:2.0 AS base WORKDIR /app EXPOSE 80 FROM microsoft/aspnetcore-build:2.0 AS build WORKDIR /src COPY eShopOnContainers-ServicesAndWebApps.sln ./ COPY src/Services/Basket/Basket.API/Basket.API.csproj src/Services/Basket/Basket.API/ COPY src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/Microsoft.AspNetCore.HealthChecks.csproj src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/ COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/ COPY src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj src/BuildingBlocks/EventBus/EventBusRabbitMQ/ COPY src/BuildingBlocks/EventBus/EventBus/EventBus.csproj src/BuildingBlocks/EventBus/EventBus/ COPY src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj src/BuildingBlocks/EventBus/EventBusServiceBus/ RUN dotnet restore COPY . . WORKDIR /src/src/Services/Basket/Basket.API RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "Basket.API.dll"]