Рубрики
Интернет Программирование

Обход ограничений к Docker Hub

30-ого мая 2024 года мы внезапно узнали, что Docker Hub может внезапно превратиться в тыкву. Почему? А потому что санкции. Никогда такого не было и вот опять. Самое любопытное, что уже 3 июня 2024 года Docker Hub снова стал доступен, хотя вроде как никто ничего и не отменял. Тем не менее, доверять сервису уже не особо приходится и стоит быть готовым к подобным ситуациям в будущем.

Маршрутизация на роутере

Увы, но Docker Hub не первый и явно не последний и потому имеет смысл настроить маршрутизацию в туннель по доменам на роутере. Это очень удобно, ведь достаточно настроить роутер, а на сами устройства не потребуется установки ничего дополнительного на сами девайсы.

Впрочем, у меня самого руки пока не дошли до настройки роутера, так что не могу ничего гарантировать.

Публичные зеркала Docker Hub

Это зеркала репозитория — они дают доступ к тем же образам и контейнерам. Вот несколько заграничных вариантов: 

Но поскольку наши нетрадиционные партнёры по опасному политическому процессу могут и тут перекрыть кислород, то имеет смысл нацелится на отечественные зеркала:

Для того чтобы настроить 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 будет работать через прокси.

Заключение

Блокировка такого крупного ресурса это очень неприятно, но в такое вот время мы живём. Радует лишь то, что выход есть всегда и современные технологии творят чудеса.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *