Вопрос или проблема
Я использую 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 в вашей среде.