【问题标题】:Docker - Windows Container - Install DotNet Framework 472Docker - Windows 容器 - 安装 DotNet 框架 472
【发布时间】:2019-05-26 17:39:42
【问题描述】:

我正在尝试使用 .net 框架 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\4.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 的所有内容的本地目录(包括 安装程序)
  3. 我正在使用卷运行容器

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

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

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 -match '^(? !S)\p{L}'} |选择 PSChildName、版本、版本

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

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

我没有想法。 有什么想法吗?

谢谢

【问题讨论】:

标签: .net powershell docker chocolatey windows-container


【解决方案1】:

【讨论】:

  • 我已经接受了答案。谢谢你。但是,如果有人能够提供从 microsoft/windowsservercore 开始的解决方案,我会[也] 感兴趣
  • Microsoft dockerfile 是从 windowsservercore 开始的。你的问题是什么意思?
【解决方案2】:

如果您真的想在不使用现有映像的情况下执行此操作,那么您可以创建一个 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)
  • 您将需要更新下载路径以应对未来的 microsoft 补丁 4.7.2 或移动下载等。

但是,如果您只执行一次,您可以在自己的个人容器注册表中注册它,并将其用作您的基础镜像以用于进一步的 DockerFiles(例如,将其用作 FROM)

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2018-12-01
    • 2021-07-21
    • 2019-04-12
    相关资源
    最近更新 更多