首页 > 解决方案 > 在 Windows Docker 构建中从 Chocolatey.org 诊断下载超时

问题描述

我正在尝试组合一个可以运行 .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 容器的上下文之外下载脚本没有问题。
  3. 我可以在 Docker 容器中毫无问题地 ping Chocolatey.org。
  4. 我可以从 Docker 容器(即 google.com 或 nuget.org)中下载其他站点的内容。
  5. 我已经完全摧毁了这台构建机器并提供了一台新机器(通过 BOSH)。

结论:似乎存在某种与 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

标签: dockerchocolateydocker-for-windows

解决方案


当您安装 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 后,有一些巧克力设置可用于解决网络问题:

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

推荐阅读