Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Building a Docker image from a multi project dot net core solution

I am trying to build a docker image from a visual studio solution that consists of two projects:

  • one project contains common code (http methods, logging etc)
  • the other is the business logic and application

I can build and run in Visual Studio, which produces a Docker image that I am able to deploy to our test environment. However, any POSTs sent to the API in the test environment return a 500 error. I can see references like: '/Users/Tim/Documents/Dotnet Code/dotnetcore-app/App/MyClass.cs' in the error response, which leads me to suspect there is something up with the image - that path is on my laptop.

Hoping someone else may have come across something similar, or could provide some pointers about building a multi project solution like this into a Docker container.

Disclaimer: this is my first time working with dotnet core and visual studio - I have some experience with docker.

like image 270
Tim Keegan Avatar asked Apr 09 '18 05:04

Tim Keegan


People also ask

Can a Docker container have multiple applications?

It's ok to have multiple processes, but to get the most benefit out of Docker, avoid one container being responsible for multiple aspects of your overall application. You can connect multiple containers using user-defined networks and shared volumes.


Video Answer


1 Answers

If you use "standard" Dockerfile template from Visual Studio, you might have issue with having your "common" project being built on your local PC (probably windows) and the "main" project being built in docker container (probably Linux). the "main" dll is referencing windows-built dll, hence the issues.

Make sure you are copying not only main project, but also the common project, so dotnet can build it in docker also.

Try out this 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"]

Although is to build the "Main" project, it's executed on the sln level.

like image 187
Miq Avatar answered Oct 02 '22 18:10

Miq