noohub.ru

Docker Hub proxy by NooSoft

proxy-сервер для registry-1.docker.io (docker.io)

Для чего?

30 мая 2024 года руководство Docker отключило доступ к Docker Hub для IP-адресов жителей России, ссылаясь на очередные санкции США

При попытке загрузить какой-либо образ по адресу registry-1.docker.io, пользователь получает ошибку:

Error response from daemon: pull access denied for nginx, repository does not exist or may require 'docker login': denied:

403 Forbidden

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/

Как это работает?

1. Использование через конфиг Docker методом зеркалирования

В зависимости от операционной системы, конфигурационный файл daemon.json будет расположен:

Операционная система Путь к файлу конфигурации
Linux, regular setup /etc/docker/daemon.json
Linux, rootless mode ~/.config/docker/daemon.json
Windows C:\ProgramData\docker\config\daemon.json
Windows с Docker Desktop C:\Users\<Пользователь>\.docker\daemon.json

В случае с установкой Docker в версии "Linux, regular setup" и наличии папки по пути /etc/docker, но отсутствии самого файла daemon.json, необходимо его создать.

Если файл daemon.json присутствиует, тогда необходимо добавить следующее:

{ "registry-mirrors" : [ "https:\/\/noohub.ru" ] }

Для linux-пользователей. После изменения файла daemon.json, необходимо перезагрузить docker командой (systemd):

systemctl reload docker

Данная команда позволяет перезагрузить конфигурцию docker без полной перезагрузки. Соответственно, все активные контейнеры не будут перезапущены.


ПРИМЕЧАНИЕ:

Заполнять сам адрес proxy-сервера необходимо через :\/\/ вместо ://. В противном случае прокси работать не будет!

2. Прямое (явное) указание адреса

В случае ручной загрузки образа можно использовать прямое указание адреса:

docker pull noohub.ru/alpine:latest

В случае использования в конфигурационных файлах Dockerfile:

FROM noohub.ru/node:21-alpine3.18

ENV APP_ROOT /var/opt/app
ARG NODE_ENV=production
ENV NODE_ENV ${NODE_ENV}
ARG FETCH_URL
ENV FETCH_URL ${FETCH_URL}

WORKDIR ${APP_ROOT}

ADD . ${APP_ROOT}

EXPOSE 3000

RUN npm install
RUN yarn add react-scripts
RUN yarn build
CMD ["yarn", "start"]

В случае использования в конфигурационных файлах docker-compose.yml:

services: app: container_name: app image: noohub.ru/app:latest restart: always env_file: - .env volumes: - ./config:/opt/app/config - ./src:/opt/app/src - ./package.json:/opt/package.json - ./public/uploads:/opt/app/public/uploads expose: - '3000' ports: - '3000:3000'

Какие еще альтернативы?

Есть и другие proxy-серверы:

Адрес Описание
https://huecker.io Первый ответ на блокировку
https://cr.yandex/mirror Яндекс
https://dockerhub1.beget.com BeGet
https://mirror.gcr.io Google
https://dockerhub.timeweb.cloud/ TimeWeb
https://public.ecr.aws Amazon
https://ghcr.io GitHub
https://daocloud.io DaoCloud (Китай)
https://sf.163.com NetEase (Китай)

ПРИМЕЧАНИЕ:

Заполнение адреса proxy-сервера, в случае альтернатив, работает по тому же принципу, что и в пункте 1.