web-dev-qa-db-fra.com

Création d'une image Docker à partir d'une solution multi-points dot net core

J'essaie de construire une image Docker à partir d'une solution Visual Studio qui se compose de deux projets:

  • un projet contient du code commun (méthodes http, journalisation, etc.)
  • l'autre est la logique métier et l'application

Je peux créer et exécuter dans Visual Studio, qui produit une image Docker que je peux déployer dans notre environnement de test. Cependant, tous les POST envoyés à l'API dans l'environnement de test renvoient une erreur 500. Je peux voir des références comme: '/Users/Tim/Documents/Dotnet Code/dotnetcore-app/App/MyClass.cs' dans la réponse d'erreur, ce qui m'amène à soupçonner qu'il y a quelque chose avec l'image - ce chemin est sur mon ordinateur portable.

En espérant que quelqu'un d'autre ait rencontré quelque chose de similaire ou pourrait fournir des conseils sur la création d'une solution multi-projets comme celle-ci dans un conteneur Docker.

Avertissement: c'est la première fois que je travaille avec dotnet core et visual studio - j'ai une certaine expérience avec docker.

9
Tim Keegan

Si vous utilisez un modèle Dockerfile "standard" de Visual Studio, vous pourriez avoir des problèmes avec la création de votre projet "commun" sur votre PC local (probablement Windows) et le projet "principal" étant construit dans un conteneur Docker (probablement Linux). la DLL "principale" fait référence à une DLL construite sous Windows, d'où les problèmes.

Assurez-vous de copier non seulement le projet principal, mais aussi le projet commun, afin que dotnet puisse également le construire dans docker.

Essayez ce 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"]

Bien qu'il s'agisse de construire le projet "Main", il est exécuté au niveau sln.

13
Miq