Доброго времени суток, коллеги. Вчера, 30 мая 2024 года, Docker без предупреждений заблокировал доступ к DockerHub для РФ и Беларуси, что для проектов стоящих в продакшене на Docker стало серьёзным форс-мажором и проблемой, т.к. все образы скачивались оттуда, и фактически сборка проекта так, как это было раньше, стала невозможной.
Error response from daemon: pull access denied for nginx, repository does not exist or may require 'docker login': denied: <html><body><h1>403 Forbidden</h1> 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/ </body></html>
Кто-то смог найти решение и справился сам, кто-то перепробовал множество способов. Уже была статья, где в комментариях давалось множество решений, в том числе сомнительных, и рабочий способ нужно было искать среди кучи комментариев, немалая часть из которых являлись не более чем флудом и демагогией.
Я решил создать отдельную статью, чтобы поделиться способом, который сработал для меня, чтобы те, кто ещё в поиске решения, не копались в куче информации, и сразу за 5 минут решили проблему. Не знаю сколько ещё этот способ будет работать, и как скоро заблокируют эти хосты, но пока работает - пользуйтесь на здоровье.
Итак, проблема решается в два шага:
-
Нужно найти Docker-овский файл настроек daemon.json, вот его пути в разных ОС:
Linux: /etc/docker/daemon.json
Windows (либо этот): C:\ProgramData\docker\config\daemon.json
Windows (либо этот): C:\Users\ИмяПользователя\.docker\daemon.json
MacOS: файл редактируется в приложении Docker Desktop, скрин ниже
Далее необходимо отредактировать этот файл. С 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, где при пересборке создаётся новая тачка ВМ, данные настройки слетают, и вышеописанные манипуляции придётся совершить повторно, чтобы не столкнуться с ошибкой при следующей сборке. Ну, с этим можно жить, главное иметь этот нюанс в виду. Возможно я найду способ сделать так, чтобы в том же клауде новая тачка создавалась сразу с этими настройками. Но я и так потратил часть дня и ночь чтобы заставить это работать, так что пора делать перерыв на сон.
Поменьше форс-мажоров нам, коллеги и друзья, ведь и без этого хватает задач, верно?
Комментарии (65)
olegtsss
31.05.2024 02:37+2А в чем проблема, если запустить трафик до докер хаба через импортный vpn?
mayorovp
31.05.2024 02:37+1В прошлых обсуждениях была информация что зеркала не принимают креды от докерхаба, из-за чего запросы к зеркалам не работают, потому докер лезет на основной сайт и создаётся впечатление что настройка зеркал вообще не работает.
Добавить бы в инструкцию про необходимость разлогиниться чтобы зеркала заработали.
Rikkster Автор
31.05.2024 02:37Я перечислил все действия, которые позволили заставить работать Docker лично у меня
mayorovp
31.05.2024 02:37+8Но нужно-то чтобы докер заработал у того, то вашим инструкциям следовал
Rikkster Автор
31.05.2024 02:37я имею в виду, что я не упустил ни один шаг. если мне это не потребовалось, как я могу знать, что потребуется кому-то другому? и с чего это не заработает у кого-то если заработало у меня?? к тому же если не работает, можно осветить ситуацию в комментариях, подробно описав её, вместо того, чтобы минусить
AquariusStar
31.05.2024 02:37А как насчёт варианта установки и обновления из скачанных образов контейнеров? Или такие инструкции давно существуют?
SkryabinD
31.05.2024 02:37docker login у вас работает с такими настройками? у меня не взлетает, ошибку 403 все равно возвращает. Логиниться пытается на основные серверы:
Error response from daemon: login attempt to https://registry-1.docker.io/v2/ failed with status: 403 Forbidden
GennPen
По этому вопросу лучше бы сделали сборник зеркал, проверили бы их на работоспособность, какая скорость через них и т.п.
yungd1plomat
https://huecker.io/ тут можно глянуть список зеркал )