将 MSI 安装到 ASP.NET Core App Service Windows 容器

将 MSI 安装到 ASP.NET Core App Service Windows 容器

我正在尝试使用 Visual Studio 2019 开发在 Windows 版 Docker 中运行的 ASP.NET Core 3.1 应用程序。我遇到了一些问题。我需要托管一个端点来启动和停止服务并提供一些健康检查信息。这些服务是从第三方 MSI 安装的(我很想直接复制文件,但我们不想在不受支持的情况下运行它,而且它的文件和注册表会发生变化)。基本(dotnet/sdk、/core 和 /aspnet)映像基于 Nano Server,因此不支持 MSI/msiexec。我尝试了大量映像来找到一个支持 ASP.Net Core 和 msiexec(Server Core)的映像,但似乎只有大映像才符合我们的需求(8+ GB 对比 Nano 的 <500MB)。这里还有其他可能性吗?目前,我甚至无法让构建持续工作。文件会生成,但不会出现在最终镜像中,如果成功,我似乎无法访问它们(尝试使用端口 80/443、5000/5001 或实际 Docker 公开的端口,使用 localhost 或容器的 IP 地址)。这真是令人沮丧!我很乐意得到任何帮助。

  1. 寻找支持 ASP.net Core 3.1 和 msiexec 的合理大小的图像
  2. 构建流程以正确发布和复制文件到最终镜像
  3. 可以从容器外部访问的服务。

当前docker文件:

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

相关内容