Как заставить Docker работать в России и Беларуси

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

Error response from daemon: pull access denied for nginx, repository does not exist or may require 'docker login': denied:

403 Forbidden

Since Docker is a US company, we must comply with US export control regulations. In an effort to comply with these, we now block all IP addresses that are located in Cuba, Iran, North Korea, Republic of Crimea, Sudan, and Syria. If you are not in one of these cities, countries, or regions and are blocked, please reach out to https://hub.docker.com/support/contact/

Кто-то смог найти решение и справился сам, кто-то перепробовал множество способов. Уже была статья, где в комментариях давалось множество решений, в том числе сомнительных, и рабочий способ нужно было искать среди кучи комментариев, немалая часть из которых являлись не более чем флудом и демагогией.

Я решил создать отдельную статью, чтобы поделиться способом, который сработал для меня, чтобы те, кто ещё в поиске решения, не копались в куче информации, и сразу за 5 минут решили проблему. Не знаю сколько ещё этот способ будет работать, и как скоро заблокируют эти хосты, но пока работает — пользуйтесь на здоровье.

Итак, проблема решается в два шага:

  1. Нужно найти Docker-овский файл настроек daemon.json, вот его пути в разных ОС:

    Linux: /etc/docker/daemon.json

    Windows (либо этот): C:\ProgramData\docker\config\daemon.json

    Windows (либо этот): C:\Users\ИмяПользователя\.docker\daemon.json

    MacOS: файл редактируется в приложении Docker Desktop, скрин ниже

7c3f5eee7725547d2da846e98768ed7a.png

Далее необходимо отредактировать этот файл. С Windows и MacOS тут всё понятно, а в Linux из доступных под рукой вариантов используем Vim. Многие используют ту или иную разновидность Linux в серверной инфраструктуре, поэтому сразу команды как найти файл и открыть его в Vim:

sudo vim /etc/docker/daemon.json

В файле мы увидим нечто подобное:

{
  "log-driver": "local"
}

Необходимо добавить в файл настройки зеркал, сохранив при этом прежнее содержимое файла. Настройки зеркал:

"registry-mirrors": [ 
    "https://mirror.gcr.io/", 
    "https://dockerhub.timeweb.cloud"
]

Получается после добавления настроек, файл выглядит следующим образом:

{
  "log-driver": "local",
  "registry-mirrors": [ 
    "https://mirror.gcr.io/", 
    "https://dockerhub.timeweb.cloud"
  ]
}

Напомню как выйти из Vim, сохранив изменения в файле:

:wq

Далее необходимо перезагрузить Docker. В MacOS при сохранении изменений это происходит автоматически, для Windows не подскажу точную команду (можете банально перезагрузить ПК), а для разновидностей Linux это делается одной командой:

sudo systemctl reload docker

И ву-а-ля — работает!

По крайней мере пока что.

Мы выиграли время, и время стоит использовать, чтобы подумать, а что будет, если заблокируют и эти хосты, или с ними случится какая-то проблема?

Как перестать зависеть от Docker, возможно есть какие-то альтернативы, на которые можно плавно переезжать, чтобы не сталкиваться с подобной проблемой?

На эту тему можно порассуждать в комментариях. Дельные решения приветствуются.

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

P.S.: Также стоит обратить внимание, что в различных облачных инфраструктурах вроде Яндекс Cloud, где при пересборке создаётся новая тачка ВМ, данные настройки слетают, и вышеописанные манипуляции придётся совершить повторно, чтобы не столкнуться с ошибкой при следующей сборке. Ну, с этим можно жить, главное иметь этот нюанс в виду. Возможно я найду способ сделать так, чтобы в том же клауде новая тачка создавалась сразу с этими настройками. Но я и так потратил часть дня и ночь чтобы заставить это работать, так что пора делать перерыв на сон.

Поменьше форс-мажоров нам, коллеги и друзья, ведь и без этого хватает задач, верно?

© Habrahabr.ru