Вопрос или проблема
У меня есть корпоративный сервер, который должен использовать прокси для исходящего трафика. Следуя документации 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
для входа в реестр.
Ответ или решение
Устранение проблемы "первый пакет не соответствует 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 не может установить безопасное соединение с удаленным реестром. Это может произойти по нескольким причинам, среди которых:
-
Неправильно настроенный прокси: Если вы указали HTTPS-прокси как
https://my.secret.proxy.net:8888
, и ваш прокси-сервер не поддерживает зашифрованные соединения, это может вызвать проблему. -
Несоответствие протоколов: Некоторые прокси-серверы могут корректно работать только с HTTP-протоколом. Если ваш прокси transparent, он может не обрабатывать запросы HTTPS должным образом.
-
Настройки Docker: В Windows существует необходимость учитывать специфические настройки Docker, которые могут отличаться от использования Linux.
Решение проблемы
-
Изменение настроек прокси:
Попробуйте заменить
https://
наhttp://
в настройках переменных окружения для прокси:Restart-Service docker
-
Проверка конфигурации Docker:
В новых версиях Docker для Windows можно напрямую настраивать прокси-сервер через интерфейс приложения Docker. Проверьте эту секцию в настройках:
- Откройте Docker Desktop.
- Перейдите в раздел "Resources" -> "Proxies".
- Убедитесь, что настройки прокси указаны корректно.
-
Файл конфигурации 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" } } }
-
Тестирование доступа через прокси:
Поскольку выполнение команд вроде
pip install --proxy
работает, убедитесь, что вы также можете проверить доступ к реестру Docker через прокси. Попробуйте выполнить следующую команду:curl -x http://my.secret.proxy.net:8888 https://registry-1.docker.io/v2/
Это поможет выяснить, может ли прокси корректно обрабатывать запросы к Docker Registry.
Заключение
Использование Docker с прокси-сервером может потребовать дополнительных шагов для настройки и устранения проблем. Важно правильно указывать HTTP и HTTPS прокси, а также убедиться, что все конфигурационные файлы Docker настроены в соответствии с требованиями вашей сети. Если после всех попыток ошибка продолжает возникать, стоит рассмотреть возможность консультации с вашим сетевым администратором для выяснения возможных ограничений прокси-сервера.