从多项目点网核心解决方案构建Docker镜像

Tim*_*gan 9 c# visual-studio docker .net-core

我正在尝试从包含两个项目的visual studio解决方案构建一个docker镜像:

  • 一个项目包含公共代码(http方法,日志记录等)
  • 另一个是业务逻辑和应用程序

我可以在Visual Studio中构建和运行,它可以生成我能够部署到测试环境的Docker镜像.但是,在测试环境中发送到API的任何POST都会返回500错误.我可以看到引用如下:'/Users/Tim/Documents/Dotnet Code/dotnetcore-app/App/MyClass.cs'在错误响应中,这导致我怀疑图像有什么东西 - 该路径在我的笔记本电脑上.

希望其他人可能遇到类似的东西,或者可以提供一些关于在Docker容器中构建这样的多项目解决方案的指示.

免责声明:这是我第一次使用dotnet核心和视觉工作室 - 我对docker有一些经验.

Miq*_*Miq 13

如果您使用Visual Studio中的"标准"Dockerfile模板,您可能会遇到在本地PC(可能是Windows)上构建"常见"项目以及在docker容器(可能是Linux)中构建"main"项目的问题."main"dll引用了windows-built 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"]
Run Code Online (Sandbox Code Playgroud)

虽然是建立"主"项目,但它是在sln级别执行的.

  • 它工作正常,但是,如果我的解决方案包含多个 Web 应用程序怎么办?如何获取每个 Web 应用程序的部署? (3认同)