
Visual Studio 2019 を使用して、Docker for Windows で実行される ASP.NET Core 3.1 アプリを開発しようとしています。これにはいくつか問題があります。サービスを開始および停止し、ヘルス チェック情報を提供するためのエンドポイントをホストする必要があります。サービスはサード パーティの MSI からインストールされます (ファイルをコピーしたいのですが、サポートされていない状態で実行したり、ファイルやレジストリを変更したりしたくありません)。基本 (dotnet/sdk、/core、および /aspnet) イメージは Nano Server に基づいているため、MSI/msiexec をサポートしていません。ASP.Net Core と msiexec (Server Core) をサポートするイメージを見つけるために多数のイメージを試しましたが、大きなイメージだけがニーズに合っているようです (Nano の場合は 8 GB 以上、500 MB 未満)。ここで別の可能性はありますか? この時点では、ビルドを一貫して動作させることさえできません。ファイルはビルドされますが、最終イメージには含まれず、含まれたとしてもアクセスできないようです (ポート 80/443、5000/5001、または実際の Docker 公開ポートを localhost またはコンテナーの IP アドレスで試しています)。かなりイライラしています。助けていただければ幸いです。
- ASP.net Core 3.1 と msiexec をサポートする適切なサイズのイメージを見つける
- ファイルを最終イメージに適切に公開してコピーするためのビルドプロセス
- コンテナの外部からアクセス可能なサービス。
現在の dockerfile:
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# INSTALL dotnet
ADD https://download.visualstudio.microsoft.com/download/pr/c37ece76-1305-4042-a9e6-58e7cb1b0bf6/75c20ff59335e370985b4f03fa637fcb/aspnetcore-runtime-3.1.18-win-x64.exe /symedical/
ADD https://download.visualstudio.microsoft.com/download/pr/7d09d7c0-8902-4467-9268-d7f584923cde/eddcb12257e68b030bc1b4baf9a68681/dotnet-runtime-3.1.18-win-x64.exe /symedical/
RUN C:/symedical/aspnetcore-runtime-3.1.18-win-x64.exe /install /quiet /norestart && \
C:/symedical/dotnet-runtime-3.1.18-win-x64.exe /install /quiet
ARG InstallerSrc="dist/installers/ThirdPartyClientServices.msi"
ARG InstallerDest="/install/"
ADD ${InstallerSrc} ${InstallerDest}
ARG InstallerSrc="dist/scripts/"
ADD ${InstallerSrc} ${InstallerDest}
RUN powershell -file "c:\dist\scripts\install-msi.ps1"
######
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["Distribution/Distribution.csproj", "Distribution/"]
RUN dotnet restore "Distribution/Distribution.csproj"
COPY . .
WORKDIR "/src/Distribution"
RUN dotnet build "Distribution.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Distribution.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Distribution.dll"]