Все известно, что Докерхаб закрыл доступ для пользователей из санкционных стран, включая РФ и РБ. Помимо стандартных всем известных способов обхода блокировок есть и специфические для docker hub. В тех случаях, когда вы не можете воспользоваться VPN или proxy, можно прописать проксирующие серверы (зеркала) для registry прямо в настройки docker клиента.

Если вы получаете ошибку 403, которая звучит так:

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>

то вот решения.

1. Прописать прокси сервер в конфигурацию докера

(как зеркало registry-1.docker.io)
Файл расположен в:
ОС путь к файлу конфигурации
Linux, обычная установка (root) /etc/docker/daemon.json
Linux, режим без root ~/.config/docker/daemon.json
Windows C:\ProgramData\docker\config\daemon.json
Docker Desktop (Windows) C:\Users\<user>\.docker\daemon.json

Список доступных прокси достаточно большой:

URL описание
https://cr.yandex/mirror Яндекс, РФ
https://huecker.io РФ
https://public.ecr.aws Amazon
https://quay.io RedHat
https://registry.access.redhat.com RedHat
https://registry.redhat.io RedHat
https://mirror.gcr.io Google
https://daocloud.io Китай
https://c.163.com Китай
https://registry.docker-cn.com Китай
https://dockerhub.timeweb.cloud Таймвеб, РФ

Формат конфига таков:

{
  "registry-mirrors": ["https://<my-docker-mirror-host>"]
}
Можно прописать несколько прокси через запятую:
{
 "registry-mirrors" : [ "https://cr.yandex/mirror", "https://huecker.io", "https://mirror.gcr.io" ]
}
Чтобы конфиг применился, потребуется перезапустить конфигурацию:
$ systemctl reload docker
Теперь при попытке загрузки образа, клиент docker будет сначала пытаться использовать прокси.

2. Явное указание адреса

Также при операциях с реджистри можно явно указывать прокси-сервер

$ docker pull huecker.io/library/alpine:latest

3. Сделать собственный прокси реджистри в режиме кэширования

Самый простой способ запустить реестр как кэш с возможностью извлечения — запустить образ реджистри. Несколько кэшей реджистри могут быть развернуты на одном сервере. Единый кэш реестра гарантирует, что одновременные запросы не извлекают повторяющиеся данные, но это свойство не работает для кластера кэша реестра.

Докер образ реестра необходимо запустить на машине, которая имеет доступ к публичному реестру докерхаба — https://registry-1.docker.io

Можно использовать как официальный образ, так и кастомный от Хуекера.

  • При запуске образа в конфигурации необходимо прописать upstream сервер для кэширующего сервера.
  • Конфигурация в образе хранится в файле /etc/docker/registry/config.yml

Этот файл содержит много настроек, но те, что нас интересуют, следующие:

proxy:
  remoteurl: https://registry-1.docker.io
  username: [username]
  password: [password]

Логин и пароль не являются обязательными.

Есть 2 способа перезаписать дефолтную конфигурацию реестра — через подмену config.yml и через переменные окружения.

Можно указать переменную REGISTRY_PROXY_REMOTEURL при запуске контейнера с указав  команду

docker run -d -e REGISTRY_PROXY_REMOTEURL=https://cr.yandex/mirror --restart=always --name registry registry:2

или же подменить файл целиком, примонтировав его с диска.

Запуск с доступом по 5000 порту и с монтированием выглядит так:

$ docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2

Полный список параметров файла доступен в официальной документации.

[Посещений: 153, из них сегодня: 1]

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