docker - 在 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
由于多种原因,这似乎很奇怪。
- 我已经在我手动滚动的机器上成功构建了这个 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 协议添加到当前控制台中的任何现有协议中:
[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'"
推荐阅读
- flutter - 如何在列表中进行复选框选择、取消选择和全部选择?
- java - 带宽共享(master => workers)
- cookies - Outlook Web 插件 - 关闭任务窗格时清除 cookie win 10
- excel - 使用索引将所有在 col A 中有数量的行从所有工作表复制到 1 个工作表上
- c++ - 使用 powershell 我从 c++ 发送电子邮件并传递参数,如果第一个参数包含“测试邮件”,那么 powershell 将其作为 2 个参数
- docker - Docker-compose jupyterhub 问题
- javascript - redux-form 如何显示异步验证成功
- sql - 将日期 yyyy-mm-dd 转换为 mmm-yy SQL Server 2016
- batch-file - 将最后一个下划线字符之后的所有内容批量替换到文件扩展名的开头
- python - 服务器响应后,如何循环遍历类中的所有函数?