从多项目点网核心解决方案构建 Docker 映像
Posted
技术标签:
【中文标题】从多项目点网核心解决方案构建 Docker 映像【英文标题】:Building a Docker image from a multi project dot net core solution 【发布时间】:2018-09-18 10:29:39 【问题描述】:我正在尝试从包含两个项目的 Visual Studio 解决方案构建 Docker 映像:
一个项目包含通用代码(http 方法、日志等) 另一个是业务逻辑和应用程序我可以在 Visual Studio 中构建和运行,它会生成一个 Docker 映像,我可以将其部署到我们的测试环境中。但是,在测试环境中发送到 API 的任何 POST 都会返回 500 错误。我可以在错误响应中看到如下引用:'/Users/Tim/Documents/Dotnet Code/dotnetcore-app/App/MyClass.cs'
,这让我怀疑图像有问题 - 该路径在我的笔记本电脑上。
希望其他人可能遇到过类似的事情,或者可以提供一些关于将这样的多项目解决方案构建到 Docker 容器中的建议。
免责声明:这是我第一次使用 dotnet core 和 Visual Studio - 我对 docker 有一些经验。
【问题讨论】:
你能分享你的 Dockerfile 吗? asp.net core 2.0 - multiple projects solution docker file的可能重复 我遇到过这种情况。检查您引用项目的方式:1) 您可能直接通过 DLL 引用它们,而不是通过标准ProjectReference
。 2)复制主要答案中的陈述可能不正确。 3) Docker 可以认为它不应该针对 Windows……对我来说,这是由于 Docker for Windows 安装损坏。
【参考方案1】:
如果您使用 Visual Studio 中的“标准”Dockerfile 模板,您可能会遇到在本地 PC(可能是 windows)上构建“通用”项目而在 docker 容器(可能是 Linux)中构建“主”项目的问题)。 “主” dll 引用 Windows 构建的 dll,因此存在问题。
确保你不仅要复制主项目,还要复制普通项目,这样 dotnet 也可以在 docker 中构建它。
试试这个 dockerfile:
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT=Production
ENV ASPNETCORE_URLS http://*:5000
EXPOSE 5000
FROM microsoft/aspnetcore-build:2.0 AS builder
ARG Configuration=Release
WORKDIR /src
COPY *.sln ./
COPY Project.Main/Project.Main.csproj Project.Main/
COPY Project.Common/Project.Common.csproj Project.Common/
RUN dotnet restore
COPY . .
WORKDIR /src/ProjectMain
RUN dotnet build -c $Configuration -o /app
FROM builder AS publish
ARG Configuration=Release
RUN dotnet publish -c $Configuration -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Project.Main.dll"]
虽然是构建“Main”项目,但它是在sln级别执行的。
【讨论】:
它工作正常但是,如果我的解决方案包含几个 Web 应用程序怎么办。如何为每个 Web 应用获取部署集? @Daní 可以将单独的 Docker 文件添加到 Web 项目中,然后单独构建它们吗?以上是关于从多项目点网核心解决方案构建 Docker 映像的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS CDK 创建用于构建 Docker 映像的 CodeBuild 项目
为 Python 项目构建 Docker 映像时如何避免重新安装包?
如何在具有纱线工作空间的 monorepo 中从 nodejs 项目构建 docker 映像