DockerHub 403
От gulyshart для @docker_ruНастройка альтернативных репозиториев, зеркал.
Способ поднять собственный docker proxy-registry до dockerhub

Как настроиться на альтернативные зеркала
Открываем настройки демона докера
nano /etc/docker/daemon.json
И добавляем рабочее зеркало, например gcr.io
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
И рестарт
service docker restart
У вас также может быть заблокирован gcr, если вы подключаетесь по IPv6.
Еще парочка зеркал:
– https://docker.mirrors.ustc.edu.cn
– https://registry.docker-cn.com
– https://cr.yandex/mirror/ (нельзя добавить в daemon.json; не все образы)
Полюбился сообществу, прокси до docker-hub
- https://huecker.io
Нахе
Также, вы можете реализовать собственный docker-registry proxy на Sonatype Nexus
- https://help.sonatype.com/en/proxy-repository-for-docker.html
Непроверенные, но возможные зеркала
На свой страх и риск
- https://mirror.gcr.io
- https://ghcr.io
- https://mcr.microsoft.com
- https://public.ecr.aws
- https://daocloud.io
- https://registry.docker-cn.com
- https://c.163.com
- https://er-central-1.mirror.aliunc.com
- https://docker.mirrors.ustc.edu.cn
Добавление всех в одну строку
На свой страх, риск и ментальное здоровье
{
"registry-mirrors" : ["https://huecker.io", "https://yandex.cr/mirror/", "https://mirror.gcr.io", "https://ghcr.io", "https://gcr.io", "https://mcr.microsoft.com", "https://public.ecr.aws", "https://daocloud.io", "https://registry.docker-cn.com", "https://c.163.com", "https://eu-central-1.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn"]
}
Второй вариант добавления зеркала:
nano /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --registry-mirror=<MIRROR>'
Как сделать собственный proxy-registry

Было много разных способов, но самый эффективный признали Кеширующий-прокси-репозиторий. Который бы хранил свои образы и мог подтягивать их из других репозиториев.
Чудо в том, что таковым является Sonatype Nexus
- https://help.sonatype.com/en/proxy-repository-for-docker.html
Инструкция фастом, для тех, кто знает.
Идею сувать Nginx, Certbot, Nexus в docker-compose, я отложу. Поднимем в docker-compose мы только Nexus. Ибо проще, быстрее. Серфтификаты вы получите уже сами, как и обвязку вокруг
# docker-compose.yml
version: "3"
services:
nexus_registry:
container_name: nexus_registry
image: sonatype/nexus3
ports:
- "8081:8081" # Для сайта
- "8082:8082" # Для Docker proxy-registry
volumes:
- "./data/nexus:/opt/sonatype/sonatype-work:rw"
Если жалуется на права, просто дай их
chmod 777 ./data/nexus
(Есть риск воспламенения соседнего админа, за такое пробрасывание прав)
Поднимаем сервис
docker-compose up -d
Получаем пароль от админки:
echo "admin password | $(cat data/nexus/nexus3/admin.password)"
Если не сработало, задумайся, но можешь попробовать сделать так
docker exec -it nexus_registry cat sonatype-work/nexus3/admin.password ; echo " "
Если ты настроил обвязку из nginx, certbot, заходи по обвязке. Тем, кто повторяет
Если делаешь на удалённом сервере, то как зайти найдёшь введя
echo "http://$(curl ifconfig.io):8081"
Если настраиваешь на своей системе, то http://localhost:8081
Логинишься. По дефолту User: admin, пароль ты знаешь.
Пройдёшь настроку. А дальше


- Устанавливаем флаг HTTP и указываем желаемый порт (У автора 8082)
- Устанавливаем флаг «Allow anonymous docker pull»
- Устанавливаем флаг «Enable Docker V1 API» (Для легаси)
- В поле Remote storage указываем: https://registry-1.docker.io
- Docker Index: устанавливаем в положение «Use Docker Hub»
- Устанавливаем флаг «Allow Nexus Repositpry Manager to download and cache foreign layers»
Поздравляю, прокси настроено. Включи токены. Делай пулл и дыши спокойно

От автора конфиг на nginx.
И на последок. Можешь писать автору, какой он неправильный, что он сделал не так и как бы ты сделал лучше и вообще слишком сложно для простого и слишком просто для сложного и как он не полно и что ещё есть. Вместе посмеёмся.
Всех солнышек с 30 мая 2024. Прощайте
server {
server_name <DOMAIN_REPLACE_ME>;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/<DOMAIN_REPLACE_ME>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<DOMAIN_REPLACE_ME>/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location / {
proxy_pass http://localhost:8081/;
}
location /v2/ {
proxy_pass http://localhost:8082/v2/;
}
}
server {
listen 80;
server_name <DOMAIN_REPLACE_ME>;
if ($host = <DOMAIN_REPLACE_ME>) {
return 301 https://$host$request_uri;
}
}
Видео по статье. Так на всякий