30.05.2024 DockerHub перестал работать в РФ. При попытке обратить к нему начала возвращаться ошибка 403
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/
На данный момент работает механизм зеркалирования репозитория (registry:2).
Вы можете развернуть зеркало на любом зарубежном VPS и использовать его в обход блокировки.
Я использую хостинг Server space, ДЦ Амстердам. Единственный из более-менее нормальный хостеров с ДЦ за рубежом и поддержкой Российских карт.
В docker-compose файле описана следующая конфигурация:
- Traefik с настроенным HTTPS (ACME, Let's Encrypt) и фильтром IP адресов
- Docker registry
Traefik выступает в качестве фронтенда перед докер реестром.
- "--certificatesresolvers.myresolver.acme.email={your@email}"
Замените {your@email} на свой адрес электронной почты
Приведите аргументы команды к таким значениям:
- "--log.level=DEBUG"
- "--accesslog=true"
- "--api.insecure=true"
- "--api.dashboard=true"
- "--api.debug=true"
Раскоментируйте строку с портом
- "8080:8080"
Перезапустите traefik. Теперь вы можете зайти в веб интерфейс по адресу http://{IP}:8080
- "traefik.http.routers.dockerproxy.rule=Host(`{domain}`)"
Замените {domain} на публичный адрес сервиса (на этот адрес будет выпущен SSL сертификат)
- "traefik.http.middlewares.ipallowlist.ipallowlist.sourcerange=127.0.0.1/32"
Пропишите в этом блоке белый список IP адресов, или удалите следующие строчки для отключения фильтра
- "traefik.http.middlewares.ipallowlist.ipallowlist.sourcerange=127.0.0.1/32"
- "traefik.http.routers.dockerproxy.middlewares=ipallowlist"
docker compose up -d
Заходим Settings -> Docker Engine
Добавляем в JSON такую запись (не забудте заменить {domain} на публичный адрес своего инстанса docker registry)
"registry-mirrors": [
"https://{domain}"
]
В результат должно получится примерно так:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://{domain}"
]
}