Доброго времени суток, коллеги. Вчера, 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 минут решили проблему. Не знаю сколько ещё этот способ будет работать, и как скоро заблокируют эти хосты, но пока работает - пользуйтесь на здоровье.

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

  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, скрин ниже

Далее необходимо отредактировать этот файл. С 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)


  1. GennPen
    31.05.2024 02:37
    +6

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

    По этому вопросу лучше бы сделали сборник зеркал, проверили бы их на работоспособность, какая скорость через них и т.п.


    1. yungd1plomat
      31.05.2024 02:37
      +2

      https://huecker.io/ тут можно глянуть список зеркал )


  1. olegtsss
    31.05.2024 02:37
    +2

    А в чем проблема, если запустить трафик до докер хаба через импортный vpn?


    1. sintech
      31.05.2024 02:37
      +5

      Импортный впн под запретом уже в России. Свои не пускают, чужие запрещают. Жизнь- борьба.


      1. olegtsss
        31.05.2024 02:37
        +5

        Технически же работает.


      1. kspshnik
        31.05.2024 02:37
        +1

        А можно ссылку на конкретный нормативно-правовой акт, пожалуйста?


  1. mayorovp
    31.05.2024 02:37
    +1

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

    Добавить бы в инструкцию про необходимость разлогиниться чтобы зеркала заработали.


    1. Rikkster Автор
      31.05.2024 02:37

      Я перечислил все действия, которые позволили заставить работать Docker лично у меня


      1. mayorovp
        31.05.2024 02:37
        +8

        Но нужно-то чтобы докер заработал у того, то вашим инструкциям следовал


        1. Rikkster Автор
          31.05.2024 02:37

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


  1. AquariusStar
    31.05.2024 02:37

    А как насчёт варианта установки и обновления из скачанных образов контейнеров? Или такие инструкции давно существуют?


  1. SkryabinD
    31.05.2024 02:37

    docker login у вас работает с такими настройками? у меня не взлетает, ошибку 403 все равно возвращает. Логиниться пытается на основные серверы:

    Error response from daemon: login attempt to https://registry-1.docker.io/v2/ failed with status: 403 Forbidden


    1. SkryabinD
      31.05.2024 02:37

      Сам себе отвечу - с зеркалами docker login не нужен в цепочке.


    1. doommer
      31.05.2024 02:37
      +1

      Залогиниться можно через впн/проксирование. Можно даже отдельно роутинг через впн для адреса(ов) хоста registry-1.docker.io 


      1. olegtsss
        31.05.2024 02:37

        Мне кажется это самая логичная история, решающая проблему. Или что-то тут не так?