我试图整合一个可以运行.NET版本的Windows Docker容器。考虑到依赖关系我需要最好的方法,这似乎是利用Chocolatey。但是在Chocolatey的安装步骤中,我正在尝试运行命令
的下载超时Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
完整错误如下。
Exception calling "DownloadString" with "1" argument(s): "The operation has
timed out"
At C:\install.ps1:3 char:51
+ ... ess -Force; iex ((New-Object System.Net.WebClient).DownloadString('ht ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordE
xception
+ FullyQualifiedErrorId : WebException
由于种种原因,这似乎很奇怪。
结论:似乎存在某种与Docker相关的网络问题,它不会阻止与chocolatey.org上的服务器的连接,但仍然无法从那里读取URL的内容。
但是我没有使用故障排除工具,我们将非常感谢任何想法。
完整Docker文件
FROM microsoft/windowsservercore:1709
COPY install.ps1 /install.ps1
RUN powershell /install.ps1
ENTRYPOINT powershell
完整安装.ps1
$ErrorActionPreference = "Stop"
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install 7zip -y
choco install visualstudio2017professional -y
choco install visualstudio2017-workload-manageddesktop --includeOptional --pre -y
choco install visualstudio2017-workload-universal --includeOptional --pre -y
choco install nuget.commandline
答案 0 :(得分:0)
解决方案 如果您具有以下条件:
PowerShell v3 + .NET Framework 4.5 您可以仅运行以下命令而不是单行安装Chocolatey:
$ securityProtocolSettingsOriginal = [System.Net.ServicePointManager] :: SecurityProtocol
尝试{ #设置TLS 1.2(3072),然后设置TLS 1.1(768),然后设置TLS 1.0(192),最后设置SSL 3.0(48) #使用整数,因为TLS 1.2和TLS 1.1的枚举值不会 #存在于.NET 4.0中,即使.NET 4.5+是 #已安装(.NET 4.5是就地升级)。 [System.Net.ServicePointManager] :: SecurityProtocol = 3072 -bor 768 -bor 192 -bor 48 } { Write-Warning'由于安装了旧的.NET Framework,因此无法将PowerShell设置为使用TLS 1.2和TLS 1.1。如果您发现基础连接已关闭或信任错误,则可能需要执行以下一项或多项操作:(1)升级到.NET Framework 4.5和PowerShell v3,(2)指定内部Chocolatey程序包的位置(设置$ env:chocolateyDownloadUrl之前在内部安装或托管软件包),(3)使用“下载+ PowerShell”安装方法。有关所有安装选项,请参见https://chocolatey.org/install。” }
iex(((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
[System.Net.ServicePointManager] :: SecurityProtocol = $ securityProtocolSettingsOriginal
答案 1 :(得分:0)
在安装Chocolatey本身时,请确保TLS1.2可用。 此命令行会将TLS1.2协议添加到当前控制台中的任何现有协议中:
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
要在系统范围和永久范围内启用TLS1.2,必须使用注册表:
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\Enabled = 1
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\DisabledByDefault = 0
此外,在安装Chocolatey之后,还有一些Chocolatey设置可用于解决网络问题:
choco config set --name="'commandExecutionTimeoutSeconds'" --value="'2700'"
choco config set --name="'webRequestTimeoutSeconds'" --value="'30'"
choco config set --name="'proxy'" --value="'myproxy.myorg.com:8080'"
choco config set --name="'proxyUser'" --value="'username'"
choco config set --name="'proxyPassword'" --value="'P@ssw0rd'"