Восстанавливаем доступ к Docker Hub

Источники

Предисловие

Если вы получаете подобную ошибку:

Error response from daemon: pull access denied for traefik, 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>

То поздравляю, вы попали под блокировку от Docker Hub, и теперь вы не можете просто так взять и скачать образы. К данному моменту уже вышли инструкции по исправлению данной проблемы. В качестве решения предлагается воспользоваться прокси, указав их в качестве registry-mirrors. Однако, если вы не доверяете сторонним сервисам и владеете любым сервером, у которого все еще есть доступ к Docker Hub, предлагаю использовать его. Для этого поднимите следующий контейнер:

Если такого сервера у вас нет, то используйте прокси, которому доверяете. Рекомендовать какой-либо в рамках данной статьи я не берусь.

Установка средствами Docker-compose

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
---
version: "3"
services:

  registry-mirror:
    image: registry:2
    container_name: registry
    environment:
      - REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
    ports:
      - 6000:5000
    restart: always
1
2
docker compose pull
docker compose up -d

CLI Установка

1
2
3
4
docker run -d -p 6000:5000 \
    -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
    --restart always \
    --name registry registry:2

Настройка registry-mirrors

Теперь переходим на машину, где возникает ошибка. Укажите свой сервер в качестве зеркала в конфигурационном файле /etc/docker/daemon.json:

1
nano /etc/docker/daemon.json
1
2
3
{
  "registry-mirrors" : [ "http://ip_address_your_host:6000" ]
}

В текущей конфигурации получается http соединение. Либо используйте vpn, либо настройте https.

После нужно перезапустить Docker:

1
systemctl reload docker

Проверить registry-mirrors можно следующей командой:

1
docker info

Ближе к концу, будет пункт Registry Mirrors, там должен быть указан ваш сервер.

Все. Попробуйте docker compose pull, сервер скачает образ и отдаст его вам.

Docker автоматически обходит зеркало, если не может получить к нему доступ. Если вы все еще получаете ошибку 403, проверьте, правильно ли указали адрес и порт.

Получить список закешированных образов можно следующей командой:

1
curl http://ip_address_your_host:6000/v2/_catalog