在Windows Docker构建中诊断chocolatey.org的下载超时

时间:2018-06-04 22:23:50

标签: docker chocolatey docker-for-windows

我试图整合一个可以运行.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

由于种种原因,这似乎很奇怪。

  1. 我已经在我手上的机器上成功构建了这个Docker镜像 滚动,但失败发生在我们的配置版本上 机。
  2. 我可以RDP到机器上并下载脚本 docker container的上下文没有问题。
  3. 我可以在Docker容器中ping chocolatey.org而不会出现问题。
  4. 我可以从Docker中下载其他网站的内容 容器(即google.com或nuget.org)。
  5. 我已完全销毁了这台构建机器并配置了一台新机器 一个(通过BOSH)。
  6. 结论:似乎存在某种与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
    

2 个答案:

答案 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'"