Диагностика таймаута загрузки с chocolatey.org в сборке Windows Docker - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь собрать контейнер Windows Docker, который может запускать сборки .NET.Учитывая зависимости, мне нужен лучший способ сделать это, казалось, чтобы использовать 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. Я могу без проблем пропинговать chocolatey.org в контейнере Docker.
  4. Я могу загружать содержимое других сайтов из контейнера Docker.(т. е. google.com или nuget.org).
  5. Я полностью уничтожил этот сборочный компьютер и подготовил новый (через BOSH).

Вывод: кажется, что некоторыепроблема с сетью, связанная с Docker, которая не препятствует подключению к серверам на chocolatey.org, но тем не менее мешает чтению содержимогоf URL-адреса оттуда.

Однако у меня нет инструментов для устранения неполадок, и любые идеи будут весьма признательны.

Полный файл Docker

FROM microsoft/windowsservercore:1709

COPY install.ps1 /install.ps1
RUN powershell /install.ps1

ENTRYPOINT powershell

Полный install.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

1 Ответ

0 голосов
/ 14 августа 2018

Решение Если у вас есть следующее:

PowerShell v3 + .NET Framework 4.5 Вы можете просто запустить следующее вместо однострочной, чтобы установить Chocolatey:

$ securityProtocolSettingsOriginal = [System.Net.ServicePointManager] :: SecurityProtocol

try {# Установить 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} catch {Write-Warning 'Невозможно настроить PowerShell на использование TLS 1.2 и TLS 1.1 из-за старой установленной .NET Framework.Если вы видите закрытое соединение или ошибки доверия, вам может потребоваться выполнить одно или несколько из следующих действий: (1) обновить до .NET Framework 4.5 и PowerShell v3, (2) указать внутреннее расположение пакета Chocolatey (предварительно установите $ env: chocolateyDownloadUrl)(для внутренней установки или размещения пакета), (3) используйте метод установки Download + PowerShell.Смотрите https://chocolatey.org/install для всех вариантов установки. '}

iex ((New-Object System.Net.WebClient) .DownloadString ('https://chocolatey.org/install.ps1'))

[System.Net.ServicePointManager] :: SecurityProtocol = $ securityProtocolSettingsOriginal

...