30-ого мая 2024 года мы внезапно узнали, что Docker Hub может внезапно превратиться в тыкву. Почему? А потому что санкции. Никогда такого не было и вот опять. Хотя США вроде бы и не говорили что нельзя, но видимо Docker Inc решили перестраховаться и заблокировали пользователей из РФ и, возможно, из Белоруссии. Самое любопытное, что уже 3 июня 2024 года Docker Hub снова стал доступен, хотя вроде как никто ничего и не отменял. Тем не менее, доверять сервису уже не особо приходится и стоит быть готовым к подобным ситуациям в будущем.
Публичные зеркала Docker Hub
Это зеркала репозитория — они дают доступ к тем же образам и контейнерам. Вот несколько заграничных вариантов:
- https://mirror.gcr.io — зеркало от Google
- https://quay.io — зеркало Quay.io (redhat)
- https://public.ecr.aws — зеркало Amazon Elastic Container Registry
- https://ghcr.io — зеркало GitHub Container Registry
Но поскольку наши нетрадиционные партнёры по опасному политическому процессу могут и тут перекрыть кислород, то имеет смысл нацелится на отечественные зеркала:
- https://registry.gitverse.ru — российская разработка
- https://dockerhub.timeweb.cloud/ — зеркало от TimeWeb
- https://dockerhub1.beget.com — Beget
- https://cr.yandex/mirror — Яндекс
Для того чтобы настроить Docker Desktop, нужно зайти в настройки и выбирать Docker Engine. В открывшемся редакторе прописываем строки с зеркалами:
"registry-mirrors": [
"https://cr.yandex/mirror",
"https://dockerhub.timeweb.cloud",
"https://dockerhub1.beget.com",
"https://registry.gitverse.ru"
]
После применяем Apply & Restart.
Для Linux потребуется сделать примерно тоже самое — открываем файл ~/.docker/config.json и добавляем те же самые строки. После выполняем команду и мы снова великолепны:
systemctl reload docker.service
Но следует помнить, что если мы захотим удалить зеркало, то нужно будет перезапустить сервис:
systemctl restart docker.service
Прокси
Зеркала позволят получить образ, но что делать, если вам нужно запушить или просмотреть образы? Здесь уже потребуется использовать прокси.
Для Docker Desktop всё просто — идём в настройки (Settings — Resources — Proxies) и в HTTP и в HTTPS вставляем одно и то же значение.
http://some-proxy-url.com:3128
С Linux несколько интересней, поскольку вместо того чтобы править ~/.docker/daemon.json (т.к. данные из daemon.json используются при сборке и в уже запущенных контейнерах), нужно выполнить следующее:
- Создать каталог /etc/systemd/system/docker.service.d
sudo mkdir -p /etc/systemd/system/docker.service.d
- Создать в нём файл http-proxy.conf
- И вставить в него следующие строки:
[Service]
Environment="HTTP_PROXY=http://some-proxy-url.com:3128"
Environment="HTTPS_PROXY=http://some-proxy-url.com:3128"
- После чего заставляем systemd найти новый сервис и перезапускаем docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Проверяем результат — мы должны увидеть Environments:
sudo systemctl show --property=Environment docker
В результате мы должны увидеть что-то вроде такого:
Environment=HTTP_PROXY=http://some-proxy-url.com:3128 HTTPS_PROXY=http://some-proxy-url.com:3128
Теперь docker pull будет работать через прокси.
Заключение
Блокировка такого крупного ресурса это очень неприятно, но в такое вот время мы живём. Радует лишь то, что выход есть всегда и современные технологии творят чудеса.