Сегодня для многих день начался с проблем загрузки образов из регистра docker hub. Причина написана на странице, которую отдает регистр при попытке открыть его или запросить какой-либо образ.
Что случилось
Докер хаб больше не обслуживает клиентов из России, судя по всему разбор “откуда пришел клиент” идет по GeoIP. При попытке открыть главную страницу получаем такое сообщение:
Тот же самый ответ показывается при попытке стянуть како-нибудь образ через консольную утилиту:
|
|
Решение через VPN
Так как дома у меня есть несколько виртуальных серверов, которым, как и основному компьютеру, нужен доступ к хабу (не
считая еще и ноутбука), то проще завернуть все запросы к хабу в VPN с выходным ip страны не из списка. Есть два основных
домена которые нужно проверить registry-1.docker.io
для получения и загрузки образов. Так же hub.docker.com
для
работы интерфейсом регистра. Каждый из них сейчас ссылается на три адреса внутри облака amazon.
Решение через mirror
Так же можно получить доступ через зеркало хаба. Для этого нужно указать его в настройках докера. Файл настроек лежит по следующим путям (взято из документации):
Операционная система и тип | Путь до файла настроек |
---|---|
Linux (основной) | /etc/docker/daemon.json |
Linux (пользовательский) | ~/.config/docker/daemon.json |
Windows | C:\ProgramData\docker\config\daemon.json |
Указывая тут путь ~/.config
подразумевается, что внутри $XDG_CONFIG_HOME
лежит именно такой путь. К корневому
объекту нужно добавить свойство registry-mirrors
, значение для которого будет массив ссылок на зеркала. Например:
|
|
Если же будет использоваться регистр без https, то обязательно нужно будет указать параметр insecure-registries
, в
котором перечислить регистры с доступом без https:
|
|
Так же после всех этих изменений нужно либо перезапустить docker, либо (что лучше) выполнить reload
конфигурации.
Параметр registry-mirrors
на работает
У меня после указания такого параметра и перезапуска зеркала не заработали. При поиске проблем обнаружил две причины:
- очень старый клиент, нужно обязательно указывать параметр
запуска
/usr/bin/dockerd --registry-mirror https://mirror.gcr.io
; - до установки параметров была выполнена авторизация, и теперь нужно разлогиниться из всех
регистров (
docker logout hub.docker.com
) и заново авторизоваться.
У меня случилась именно вторая проблема, видимо это способ не позволить “утечь” токену (или паролю?) в сторону зеркала.
Список зеркал (актуален на момент публикации)
Url зеркала | Дополнительная информация |
---|---|
https://mirror.gcr.io | Зеркало от Google Cloud |
https://quay.io | Зеркало от Red Hat |
https://dockerhub.timeweb.cloud | Зеркало от Timeweb Cloud |
https://daocloud.io | Какое-то зеркало из Китая |
https://c.163.com | Какое-то зеркало из Китая |
https://registry.docker-cn.com | Какое-то зеркало из Китая |
Важный совет по зеркалам!
Так как зеркало ВСЕГДА контролируется третьими лицами (даже если это известная компания), нужно ВСЕГДА сравнивать sha256 слепки образов на hub.docker.com и тех, что скачаны от стороннего регистра.