Docker - Windows 容器 - 安装 DotNet Framework 472

Docker - Windows Container - Install DotNet Framework 472

我正在尝试使用 .net framework 4.7.2 设置 Windows Docker 图像。 由于其他原因,我从microsoft/windowsservercore

开始

到目前为止我尝试了什么 - 我的图像上安装了 choco,所以我最初的解决方案是使用 choco install

choco install dotnet4.7.2 --allow-empty-checksums -y -v --trace -d

我得到的是0x80004005

C:\users\ContainerAdministrator\AppData\Local\Temp\chocolatey> more .\dd_NDP472-KB4054530-x86-x64-AllOS-ENU_decompression_log.txt
??[5/25/2019, 22:26:33] === Logging started: 2019/05/25 22:26:33 ===
[5/25/2019, 22:26:33] Executable: C:\Users\ContainerAdministrator\AppData\Local\Temp\chocolatey\dotnetfx.7.2.20180712\NDP472-KB4054530-x86-x64-AllOS-ENU.exe v4.7.3081.0
[5/25/2019, 22:26:33] --- logging level: standard ---
[5/25/2019, 22:26:33] Successfully bound to the ClusApi.dll
[5/25/2019, 22:26:33] Error 0x800706d9: Failed to open the current cluster
[5/25/2019, 22:26:33] Cluster drive map: ''
[5/25/2019, 22:26:33] Considering drive: 'C:\'...
[5/25/2019, 22:26:33] Drive 'C:\' has been selected as the largest fixed drive
[5/25/2019, 22:26:33] Directory 'C:\b659e2a87b51ccf0f10d6292d1a4c2\' has been selected for file extraction
[5/25/2019, 22:26:33] Extracting files to: C:\b659e2a87b51ccf0f10d6292d1a4c2\
[5/25/2019, 22:26:33] Error 0x80004005: Failed to extract all files out of box container #0.
[5/25/2019, 22:26:33] Error 0x80004005: Failed to extract

https://blog.nowmicro.com/2015/02/23/deploying-net-framework-4-5-2-configmgr-application/

根据上面链接中的一些想法,我做到了:

  1. 我手动下载了 NDP472-KB4054530-x86-x64-AllOS-ENU.exe
  2. 我在主机上本地从命令行(使用/extract)提取了它。基本上我有一个包含 NDP472 所有内容的本地目录(包括 Setup.exe)
  3. 我运行使用卷
  4. 安装容器

docker 运行 --name cw10 -v C:\MyNDP472:C:\tmp -d client-windows10

  1. 我正在使用 cmd 附加到容器。从 C:\tmp(从主机指向 C:\MyNDP472),我从命令行 运行ning。

Setup.exe /q /norestart /ChainingPackage "ADMINDEPLOYMENT" /x86 /x64 /redist /log "C:\tmp\reportdotnet.log"

  1. 结果是最终结果:安装成功完成,成功代码:(0x80070BC2),“请求的操作成功。更改在系统重新启动后才会生效

  1. 我正在检查注册表(这次使用 Powershell)

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse |Get-ItemProperty -name Version,Release -EA 0 |Where { $_.PSChildName -匹配 '^(?!S) \p{L}'} |Select PSChildName、版本、发布

  1. 我仍然使用以前版本的 .net 框架(完整版 4.6.01586 394802)- 基本映像附带的版本。 我用 docker 重新启动容器。我得到的完全一样。没有变化。

我的最终目标:我想构建一个目标为 4.7.2 的 C# sln 解决方案。

我没主意了。 有什么想法吗?

谢谢

您可以使用微软在此处为 SDK 构建其 dotnetframework 图像所使用的相同 dockerfile (https://github.com/microsoft/dotnet-framework-docker/blob/master/4.7.2/sdk/windowsservercore-ltsc2019/Dockerfile) or runtime (https://github.com/microsoft/dotnet-framework-docker/blob/master/4.7.2/runtime/windowsservercore-ltsc2019/Dockerfile)

如果你真的想在不使用现有图像的情况下执行此操作,那么你可以创建一个 powershell 脚本来下载并安装它,然后从你的 dockerfile 中调用它:

Write-Host ".Net 4.7.2 not installed. Downloading..."
Invoke-WebRequest "http://go.microsoft.com/fwlink/?linkid=863265" -OutFile "NDP472-KB4054530-x86-x64-AllOS-ENU.exe"
Write-Host "Installing .Net 4.7.2..."
$exe = ".\NDP472-KB4054530-x86-x64-AllOS-ENU.exe"
&$exe /q /norestart

DockerFile(假设您将脚本命名为 InstallNetFramework。ps1 并且它与 DockerFile 位于同一文件夹中:

FROM microsoft/windowsservercore 
RUN mkdir c:\install
ADD /InstallNetFramework.ps1 c:\install
RUN powershell c:\install\InstallNetFramework.ps1

但是您最好使用已经安装了 .Net 4.7.2 的映像,否则:

  • 每次需要构建映像时都会很慢(等待它 d/l 并每次安装 .Net 4.7.2)
  • 您将需要更新下载路径以应对未来的微软补丁 4.7.2 或移动下载等。

但是,如果您只执行一次,则可以在您自己的个人 Container Registry 中注册它,并将其用作进一步 DockerFile 的基础映像(例如,将其用作 FROM)