按照标题,我想在dotnet框架的aspnet镜像上使用dotnet核心。有一点背景知识,我有带dotnet核心库的ASP.NET(4.6)应用程序。当前它正在IIS上运行。现在,我期待通过使用Windows Server Core镜像对此进行docker化。没有特别的原因,只是希望对旧版应用程序进行Docker化和现代化。

  • 我从这张图片开始: mcr.microsoft.com/dotnet/framework/sdk
  • 而且我正在使用此图像作为运行时: mcr.microsoft.com/dotnet/framework/aspnet

  • 问题是在运行时,aspnet内的IIS无法识别aspnetmodule。在IIS中,我们通常会安装主机 bundle 包,如何在docker上做到这一点?

    谢谢

    最佳答案

    为了保持记录,我正在分享此信息。我所做的是从Microsoft处获取镜像并添加了Hosting bundle的安装。在这种情况下,我使用的是dotnet core 1.1:

    # escape=`
    ARG REPO=mcr.microsoft.com/dotnet/framework/runtime
    FROM $REPO:4.8-windowsservercore-ltsc2019
    
    SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
    
    ADD dotnetcore.1.0.16_1.1.13-windowshosting.exe /install/
    RUN Add-WindowsFeature Web-Server; `
        Add-WindowsFeature NET-Framework-45-ASPNET; `
        Add-WindowsFeature Web-Asp-Net45; `
        Remove-Item -Recurse C:\inetpub\wwwroot\*; `
        Invoke-WebRequest -Uri https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe -OutFile C:\ServiceMonitor.exe
    
    # Install Roslyn compilers and ngen binaries
    RUN Invoke-WebRequest https://api.nuget.org/packages/microsoft.net.compilers.2.9.0.nupkg -OutFile c:\microsoft.net.compilers.2.9.0.zip; `
        Expand-Archive -Path c:\microsoft.net.compilers.2.9.0.zip -DestinationPath c:\RoslynCompilers; `
        Remove-Item c:\microsoft.net.compilers.2.9.0.zip -Force; `
        &C:\install\dotnetcore.1.0.16_1.1.13-windowshosting.exe /install /quiet | `
        &C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\csc.exe /ExeConfig:c:\RoslynCompilers\tools\csc.exe | `
        &C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\vbc.exe /ExeConfig:c:\RoslynCompilers\tools\vbc.exe | `
        &C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\VBCSCompiler.exe /ExeConfig:c:\RoslynCompilers\tools\VBCSCompiler.exe | `
        &C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\csc.exe /ExeConfig:c:\RoslynCompilers\tools\csc.exe | `
        &C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\vbc.exe /ExeConfig:c:\RoslynCompilers\tools\vbc.exe | `
        &C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\VBCSCompiler.exe  /ExeConfig:c:\RoslynCompilers\tools\VBCSCompiler.exe
    
    ENV ROSLYN_COMPILER_LOCATION c:\\RoslynCompilers\\tools
    
    EXPOSE 80
    
    ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]
    

    我没有办法自动下载托管包。您可能需要从Microsoft网站https://dotnet.microsoft.com/download/dotnet-core/2.2下载它,选择运行时和托管包。

    将其与Dockerfile放在一起,以便Docker可以将其复制到镜像中。此图像可以在Windows Server 2019上运行。对于其他版本的Windows Server,您可能需要使用其他标记。

    关于asp.net - 如何在Docker dotnet框架镜像上使用dotnet核心,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58850633/

    10-15 22:28