docker - 在 Windows Docker 构建中从 Chocolatey.org 诊断下载超时

标签 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

由于多种原因,这似乎很奇怪。
  • 我已经在我手头的机器上成功构建了这个 Docker 镜像
    滚动,但失败始终发生在我们提供的构建中
    机器。
  • 我可以 RDP 到机器上并在外部下载脚本
    docker容器的上下文没有问题。
  • 我可以在 Docker 容器中毫无问题地 ping Chocolatey.org。
  • 我可以从 Docker 中下载其他站点的内容
    容器(即 google.com 或 nuget.org)。
  • 我已经完全摧毁了这台构建机器并提供了一个新的
    一个(通过 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
    

    最佳答案

    当您安装 Chocolatey 本身时,请确保 TLS1.2 可用。
    此命令行会将 TLS1.2 协议(protocol)添加到当前控制台中的任何现有协议(protocol)中:

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

    关于docker - 在 Windows Docker 构建中从 Chocolatey.org 诊断下载超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50689574/

    相关文章:

    docker - 如果容器已经存在,则需要 pod

    PHP NumberFormatter 总是给我默认的 en_US

    docker - 如果 Docker 在 windows 上原生运行,那为什么需要 hyper-v

    windows - 如何设置 Chocolatey 将应用程序安装到另一个驱动器上?

    来自 Windows 容器的 Docker Desktop for Windows : Cannot ping google. com

    docker - 所有官方的 windows docker 镜像是如何相关的?

    docker - 如何使用唯一的数据库连接字符串部署同一Docker镜像的许多实例

    javascript - 使用 Docker 部署 MERN 应用程序时 NGINX 出现 Socket.io 错误

    windows - 我应该如何创建或上传 32 位和 64 位 NuGet 包?

    用于安装 Chocolatey 和软件包列表的 PowerShell 脚本