小编典典

ASP.NET 5:使用多项目解决方案的Docker构建

docker

我正在尝试创建由4个项目组成的ASP.NET 5解决方案的映像。结构如下:

  • 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"]

但不确定放在哪里。在我的解决方案的根文件夹中global.json所在的位置,还是在我的Web应用程序文件夹中我的project.json所在的位置?当然,我已经根据该文件的位置对其进行了修改。

无论如何,两者似乎都可以正常工作,因为它在我运行命令时下载了我需要的所有库

docker build -t quizzcorrector。

我的问题是码头工人告诉我

无法找到> = 1.0.0的模型

无法找到FlashTools> = 1.0.0

无法找到QuizzService> = 1.0.0

我在此线程https://github.com/aspnet/aspnet-
docker/issues/19上看到,在多项目解决方案中,我们应该运行命令“ kpm pack”将我的应用打包为可部署和可运行的形式。

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

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

谢谢你帮我


阅读 362

收藏
2020-06-17

共1个答案

小编典典

更新日期:2018年2月14日

我之前的答案没有考虑编写Dockerfile的最佳实践。它对于具有多个Web项目的解决方案也不起作用,其中每个应用程序必须在单独的Docker容器中运行。更好的方法是在开发环境中构建和发布ASP.NET
Core应用程序,然后在针对生产用途进行了优化的Docker容器中运行该应用程序。

  1. 在Web应用程序文件夹中创建Dockerfile
  2. 将以下内容放入其中

    FROM microsoft/aspnetcore
    

    COPY ./publish /publish
    WORKDIR /publish
    EXPOSE 5000/tcp
    ENTRYPOINT [“dotnet”, “QuizzCorrector.dll”]

  3. 通过运行来构建和发布项目 dotnet publish -c Release -o publish

  4. 通过运行构建Docker映像 docker build -t QuizzCorrector

请注意,microsoft/aspnetcoreDocker映像是仅用于运行时的映像,不提供.NET Core SDK,这使其在生产中更轻巧更好。


可能已经晚了,但是对于那些仍在努力使它起作用的人,我将回答这个问题。
您需要在解决方案级别创建一个Dockerfile。然后,您需要更新您的工作文件夹以使用Web项目所在的文件夹。考虑到最终的Dockerfile
kpmk实用程序已被一种dotnet工具取代,因此在此处。

FROM microsoft/dotnet:latest

COPY . /app
WORKDIR /app/src/QuizzCorrector
RUN ["dotnet", "restore"]

EXPOSE 5004
ENTRYPOINT ["dotnet", "run"]
2020-06-17