docker pull с использованием прокси выдает “первый записанный не похоже на рукопожатие TLS”

Вопрос или проблема

У меня есть корпоративный сервер, который должен использовать прокси для исходящего трафика. Следуя документации Docker от Microsoft, я выполнил команды PowerShell:

[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://my.secret.proxy.net:8888", [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "https://my.secret.proxy.net:8888", [EnvironmentVariableTarget]::Machine)
Restart-Service docker

Но выполнение docker build после этого дает мне:

Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: первая запись не выглядит как рукопожатие TLS

Я пробовал использовать http вместо https для адресов прокси и т.д. Те же результаты. Прокси является прозрачным и не делает ничего “умного”.

Выполнение pip install flake8 --proxy=https://my.secret.proxy.net:8888 работает, так что я знаю, что прокси работает.

Есть идеи? Какие-либо советы для дальнейшей отладки? Спасибо!

В вашем "HTTPS_PROXY", "https://my.secret.proxy.net:8888" измените https:// на http://

В текущей версии Docker для Windows есть раздел ресурсы -> прокси в интерфейсе, где вы настраиваете прокси для загрузки изображений.

Ссылка: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Вам все равно нужно будет настроить переменные прокси в работающих контейнерах. Для этого вы можете обновить ~/.docker/config.json следующим образом:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.12:3128",
     "httpsProxy": "http://192.168.1.12:3128",
     "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
   }
 }
}

Я не уверен, где это находится в Windows, особенно если вы не используете WSL2, но файл должен уже существовать, если вы выполнили docker login для входа в реестр.

Ссылка: https://docs.docker.com/network/proxy/

Ответ или решение

Устранение проблемы "первый пакет не соответствует TLS-рукопожатию" при использовании прокси-сервера с Docker

Использование Docker в корпоративной среде, где требуется прокси-сервер для внешнего трафика, может вызывать некоторые сложности. Одной из распространенных проблем является сообщение об ошибке: "Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: first record does not look like a TLS handshake". В этой статье мы подробно рассмотрим возможные причины этой ошибки и предложим решения для настройки Docker под окружение с прокси.

Проблема прокси и TLS

Ошибка "first record does not look like a TLS handshake" указывает на то, что Docker не может установить безопасное соединение с удаленным реестром. Это может произойти по нескольким причинам, среди которых:

  1. Неправильно настроенный прокси: Если вы указали HTTPS-прокси как https://my.secret.proxy.net:8888, и ваш прокси-сервер не поддерживает зашифрованные соединения, это может вызвать проблему.

  2. Несоответствие протоколов: Некоторые прокси-серверы могут корректно работать только с HTTP-протоколом. Если ваш прокси transparent, он может не обрабатывать запросы HTTPS должным образом.

  3. Настройки Docker: В Windows существует необходимость учитывать специфические настройки Docker, которые могут отличаться от использования Linux.

Решение проблемы

  1. Изменение настроек прокси:

    Попробуйте заменить https:// на http:// в настройках переменных окружения для прокси:

    Restart-Service docker
  2. Проверка конфигурации Docker:

    В новых версиях Docker для Windows можно напрямую настраивать прокси-сервер через интерфейс приложения Docker. Проверьте эту секцию в настройках:

    • Откройте Docker Desktop.
    • Перейдите в раздел "Resources" -> "Proxies".
    • Убедитесь, что настройки прокси указаны корректно.
  3. Файл конфигурации Docker:

    В некоторых случаях может потребоваться настроить файл конфигурации Docker config.json. Обычно он может находиться по следующему пути:

    C:\Users\<ваше_имя>\.docker\config.json

    Если файл отсутствует, его можно создать. Убедитесь, что в нем присутствуют следующие параметры:

    {
       "proxies": {
           "default": {
               "httpProxy": "http://my.secret.proxy.net:8888",
               "httpsProxy": "http://my.secret.proxy.net:8888",
               "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
           }
       }
    }
  4. Тестирование доступа через прокси:

    Поскольку выполнение команд вроде pip install --proxy работает, убедитесь, что вы также можете проверить доступ к реестру Docker через прокси. Попробуйте выполнить следующую команду:

    curl -x http://my.secret.proxy.net:8888 https://registry-1.docker.io/v2/

    Это поможет выяснить, может ли прокси корректно обрабатывать запросы к Docker Registry.

Заключение

Использование Docker с прокси-сервером может потребовать дополнительных шагов для настройки и устранения проблем. Важно правильно указывать HTTP и HTTPS прокси, а также убедиться, что все конфигурационные файлы Docker настроены в соответствии с требованиями вашей сети. Если после всех попыток ошибка продолжает возникать, стоит рассмотреть возможность консультации с вашим сетевым администратором для выяснения возможных ограничений прокси-сервера.

Оцените материал
Добавить комментарий

Капча загружается...