web-dev-qa-db-ja.com

複数プロジェクトのドットネットコアソリューションからDockerイメージを構築する

私は、2つのプロジェクトで構成されるVisual Studioソリューションからdockerイメージを構築しようとしています。

  • 1つのプロジェクトに共通コード(httpメソッド、ロギングなど)が含まれています
  • もう1つはビジネスロジックとアプリケーションです

Visual Studioでビルドおよび実行できます。これにより、テスト環境に展開できるDockerイメージが生成されます。ただし、テスト環境でAPIに送信されたPOSTは500エラーを返します。次のような参照が表示されます:'/Users/Tim/Documents/Dotnet Code/dotnetcore-app/App/MyClass.cs'エラー応答で、画像に何か問題があると疑うようになります-そのパスはラップトップ上にあります。

他の誰かが似たようなものに出くわすか、このようなマルチプロジェクトソリューションをDockerコンテナーに構築するための指針を提供できると期待しています。

免責事項:ドットネットコアとビジュアルスタジオでの作業はこれが初めてです。Dockerの使用経験があります。

9
Tim Keegan

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

「メイン」プロジェクトをビルドすることですが、slnレベルで実行されます。

13
Miq