Все известно, что Докерхаб закрыл доступ для пользователей из санкционных стран, включая РФ и РБ. Помимо стандартных всем известных способов обхода блокировок есть и специфические для 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. Прописать прокси сервер в конфигурацию докера
ОС | путь к файлу конфигурации |
---|---|
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 | |
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
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
Полный список параметров файла доступен в официальной документации.