Docker не может загрузить образы за прокси-сервером.

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

Я использую Docker версии 20.10.14 на CentOS Linux 7, я только что установил Docker и настроил параметры прокси в /usr/lib/systemd/system/docker.service, и мои настройки прокси следующие

Environment="HTTP_PROXY=http://10.330.100.100:3128/"
Environment="HTTPS_PROXY=https://10.330.100.100:3128/"
Environment=no_proxy=localhost,127.0.0.1

Я получаю ошибку следующего вида

Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: tls: first record does not look like a TLS handshake

А при изменении HTTPS_PROXY с https на http я получаю

Error response from daemon: Get "https://registry-1.docker.io/v2/": Bad Request

А при попытке выполнить curl “https://registry-1.docker.io/v2/” я получаю

curl: (56) Received HTTP code 400 from proxy after CONNECT

Environment="HTTP_PROXY=http://10.330.100.100:3128/"
Environment="HTTPS_PROXY=https://10.330.100.100:3128/"
                             ^                  ^^^^

Здесь вы настраиваете свой прокси-сервер для работы по обычному HTTP и HTTPS на одном и том же порту. Это крайне маловероятно.

Либо ваш прокси-сервер настроен с собственным TLS-сертификатом и будет слушать на разных портах для http и https.

Либо, что обычно имеет место, прокси-сервер поддерживает только обычные http-соединения, и запросы к HTTPS-ресурсам все равно должны использовать обычный HTTP для соединения с прокси-сервером. (После подключения к прокси клиент будет использовать метод CONNECT, чтобы установить TLS-соединение через прокси с веб-сервером, что создает защищенный канал end-to-end.)

Другими словами: вам, вероятно, нужно изменить переменную HTTPS_PROXY на:

Environment="HTTPS_PROXY=http://10.330.100.100:3128/"

Когда вам нужно использовать прокси, это часто означает, что также контролируется трафик TLS. Вам может потребоваться установить и включить сертификат CA вашей организации.


Когда вам нужно использовать прокси, это означает, что другим в вашей организации также требуется делать то же самое.

Это означает, что вы (или, скорее, ваш прокси-сервер) очень быстро столкнетесь с ограничениями по количеству загрузок Docker. См. https://docs.docker.com/docker-hub/download-rate-limit/

В моем случае это вызвано дублирующимися настройками прокси.

unset http_proxy
unset https_proxy
unset no_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset NO_PROXY

Затем всё восстановилось в норму, используя только /etc/systemd/system/docker.service.d/proxy.conf.

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

Почему Docker не может загрузить образы за прокси-сервером и как это исправить

Работа с Docker в окружении, где используется прокси-сервер, может вызвать проблемы при попытке загрузки образов. В данной статье мы рассмотрим ключевые моменты настройки Docker для корректной работы за прокси и предложим решения для распространённых проблем.

Проблема с настройками прокси

На основе предоставленных данных, было установлено, что у вас Docker версии 20.10.14 на CentOS Linux 7 и настроены следующие переменные окружения:

Environment="HTTP_PROXY=http://10.330.100.100:3128/"
Environment="HTTPS_PROXY=https://10.330.100.100:3128/"
Environment=no_proxy=localhost,127.0.0.1

Однако, возникла ошибка:

Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: tls: first record does not look like a TLS handshake

Отметим, что данная ошибка свидетельствует о проблемах с установлением TLS-соединения через прокси. Давайте разберем, почему это происходит и как исправить ситуацию.

Правильная конфигурация прокси

Основной проблемой в вашей конфигурации является использование разных протоколов для переменных HTTP_PROXY и HTTPS_PROXY на одном и том же порту. Это в большинстве случаев неправильно настроено. Вам стоит изменить значение переменной HTTPS_PROXY на:

Environment="HTTPS_PROXY=http://10.330.100.100:3128/"

Такой подход используется, когда прокси-сервер поддерживает только HTTP и используется метод CONNECT для установки TLS-соединения с конечным HTTPS-сервером.

Установка корневого сертификата

Если ваш прокси-сервер контролирует трафик TLS, вам может потребоваться установить и активировать сертификат вашего корпоративного CA (сертификационного центра). Это обеспечит корректную работу с HTTPS-запросами через прокси.

Дубликаты переменных окружения

Также важно убедиться, что у вас нет дублирующихся переменных окружения, которые могут конфликтавать. Вы уже пробовали сбросить все прокси-настройки с помощью команд:

unset http_proxy
unset https_proxy
unset no_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset NO_PROXY

Это позволяет избежать возможных конфликтов и использовать только ту конфигурацию, которая прописана в файле /etc/systemd/system/docker.service.d/proxy.conf.

Заключение

Для решения проблемы с загрузкой образов в Docker за прокси-сервером убедитесь, что вы правильно настроили переменные окружения и удалили возможные дублирующиеся настройки. Регулярно проверяйте конфигурацию вашего прокси и не забывайте об установке сертификатов, если это необходимо. В случае возникновения дополнительных проблем, стоит обратиться к системному администратору вашей организации для получения дальнейшей помощи.

Дополнительные ресурсы:

  • Документация Docker по ограничениям на загрузку образов: Docker Hub Rate Limits
  • Официальная документация по настройке Docker за прокси: Docker Proxy Settings

С правильной настройкой и учетом всех нюансов, вы сможете успешно использовать Docker в вашей среде.

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

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