我正在尝试创建由 4 个项目组成的 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 .
我的问题是 docker 告诉我的那一刻
Unable to locate Models >= 1.0.0
Unable to locate FlashTools >= 1.0.0
Unable to locate QuizzService >= 1.0.0
我在这个帖子上看到过 https://github.com/aspnet/aspnet-docker/issues/19在多项目解决方案中,我们应该运行命令“kpm pack”将我的应用打包成可部署和可运行的形式。
我找不到任何使用 kpm pack 命令的 Dockerfile 示例,只有文档:https://github.com/aspnet/Home/wiki/Package-Manager
我当然也尝试过在我的 Dockerfile 中使用 ADD 或 COPY 命令将我的项目内容复制到容器的文件系统中,但仍然是同样的错误。
谢谢你的帮助
最佳答案
更新日期:2018 年 2 月 14 日
我之前的回答没有考虑编写 Dockerfile 的最佳实践。它也不适用于具有多个 Web 项目且每个应用程序必须在单独的 Docker 容器中运行的解决方案。更好的方法是在开发环境中构建和发布 ASP.NET Core 应用程序,并在针对生产使用进行了优化的 Docker 容器中运行该应用程序。
将以下内容放入其中
FROM microsoft/aspnetcore
COPY ./publish /publish
WORKDIR /publish
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "QuizzCorrector.dll"]
dotnet publish -c Release -o publishdocker build -t QuizzCorrector请注意,microsoft/aspnetcore Docker 镜像是仅运行时镜像,它不提供 .NET Core SDK,这使它更轻巧且更适合生产使用。
可能已经晚了,但我将为那些仍在努力让它工作的人回答这个问题。您需要在解决方案级别创建 Dockerfile。然后您需要更新您的工作文件夹以使用您的 Web 项目所在的文件夹。考虑到 kpm 和 k 实用程序已被一个 dotnet 工具替换,这是最终 Dockerfile 的下方。
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app/src/QuizzCorrector
RUN ["dotnet", "restore"]
EXPOSE 5004
ENTRYPOINT ["dotnet", "run"]
关于docker - ASP.NET 5 : docker build with multi-projects solution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28880135/