Как изменить реестр докеров по умолчанию с docker.io на мой частный реестр?

124

По умолчанию, если я выдаю команду:

sudo docker pull ruby:2.2.1

по умолчанию он будет загружен с официального сайта docker.io.

Pulling repository docker.io/library/ruby

Как мне изменить его в личный реестр. Это означает, что если я выдам

sudo docker pull ruby:2.2.1

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

Pulling repository my_private.registry:port/library/ruby
mainframer
источник
Удалось ли вам найти способ заставить его работать? Я искал то же самое. Я использую nexus в качестве личного реестра докеров. Я не хочу использовать свое доменное имя и номер порта в моей команде docker pull.
Динеш

Ответы:

56

ОБНОВЛЕНИЕ: после вашего комментария в настоящее время невозможно изменить реестр по умолчанию, см. Эту проблему для получения дополнительной информации.

У вас должно получиться это сделать, заменив хост и порт своими:

docker pull localhost:5000/registry-demo

Если сервер удален / имеет аутентификацию, вам может потребоваться войти на сервер с помощью:

docker login https://<YOUR-DOMAIN>:8080

Затем запускаем:

docker pull <YOUR-DOMAIN>:8080/test-image
парень
источник
14
docker pull <YOUR-DOMAIN>:8080/test-imageбыло нормально. Но я хочу docker pull test-image, что это без указания ДОМЕНА и порта и без входа в систему.
мэйнфреймер
2
Я обновил свой ответ на основе вашего комментария. В настоящее время невозможно установить реестр по умолчанию
Парень,
Маловероятно, что когда-либо станет возможным установить другой реестр по умолчанию, поскольку он нарушает пространство имен по умолчанию, на которое полагается большинство изображений
Мэтт
Они могли сделать что-то вроде @scopesnpm, чтобы ввести новые пространства имен без конфликта с существующими. Включение имени хоста реестра в имя образа затрудняет кеширование / проксирование / блокировку реестра внутри компании или проекта. Это хорошо это описывает: informit.com/articles/article.aspx?p=2464012&seqNum=3
Александр Климечек
Этот пиар кажется последним обсуждением этой темы: github.com/moby/moby/pull/34319
Александр Климечек
21

Оказывается, это есть на самом деле это возможно, но не с помощью подлинного Docker CE или EE версии.

Вы можете использовать форк докера Red Hat с флагом '--add-registry' или самостоятельно собрать докер из исходного кода с помощью файла registry / config.go, измененного так, чтобы использовать собственное жестко заданное пространство имен / индекс реестра по умолчанию.

Иосия
источник
3
Форк RedHat доступен в дополнениях centos. Спасибо, что помог мне понять, почему после перехода на версию docker.io --add-registryперестала работать.
chutz
2
Вы также можете использовать --block-registry index.docker.ioопцию, чтобы избавиться от реестра по умолчанию.
Эван
1
--add-registry Запрос тянуть было не сливались . В этой функции в конечном итоге было отказано ( # 11816 ).
Франклин Пиат,
9

если вы используете дистрибутив Fedora, вы можете изменить файл

/etc/containers/registries.conf

Добавление домена docker.io

Бруно Соуза Сабиа
источник
Этот специальный файл конфигурации redhat используется для запуска dockerd с --add-registry. Функция не будет принята Docker, если запрос на вытягивание не был объединен . (также в этой функции в конечном итоге было отказано ( # 11816 )
Франклин Пиат,
6

Похоже, что он не будет поддерживаться из-за фрагментации, которую он создаст в сообществе (т. Е. Два пользователя получат разные изображения ubuntu:latest). Вам просто нужно добавить хост перед именем изображения. См. Эту проблему на github, чтобы присоединиться к обсуждению.

(Обратите внимание, что это не задумано как самоуверенный комментарий, это просто очень краткое изложение обсуждения, за которым можно следить в упомянутой проблеме github.)

datacarl
источник
10
фрагментация - да, но только с первых дней существования Linux их стало всего три (исходная база [arch, gentoo, slax, ...], основанная на debian [debian / ubuntu] и основанная на redhat [enterprise linux, rhel, centos]. С точки зрения безопасности было бы лучше иметь возможность изменить исходный реестр по умолчанию на что-то самоуправляемое.
Дуайт Спенсер
2
Сказать «есть только три Linux: redhat, debian и source» - все равно что сказать «есть только три поисковых провайдера: google, bing и все другие поисковые провайдеры» ...
Крис Браун
4

Я попытался добавить следующие параметры в /etc/docker/daemon.json. (Я использовал CentOS7)

"add-registry": ["192.168.100.100:5001"],
"block-registry": ["docker.io"],

после этого перезапустил демон докера. И он работает без docker.io. Я надеюсь, что это кому-то будет полезно.

jacobdoni
источник
Эта конфигурация специфична для RedHat. --add-registry Запрос тянуть было не сливались .
Франклин Пиат,
2

Официальная позиция Docker изложена в выпуске №11815 :

Проблема 11815: разрешено указывать реестры по умолчанию, используемые в команде pull

Разрешение:

Как указывалось ранее (# 11815), это приведет к фрагментации пространства имен и очень сильно повредит сообществу, сделав файлы докеров не переносимыми.

[Сопровождающий] закроет это по этой причине.

У Red Hat была конкретная реализация, которая позволяла это (см. Anwser, но он был отклонен восходящим проектом Docker). Он полагался на --add-registryаргумент, который был установлен в /etc/containers/registries.confRHEL / CentOS 7.

Франклин Пиат
источник
1

Ранее это может быть достигнуто с использованием DOCKER_OPTSв /etc/default/dockerконфигурационном файле , который работал на Ubuntu 14:04 и были некоторые проблемы на Ubuntu 15:04. Не уверен, что это было исправлено.

Приведенная ниже строка должна войти в файл /etc/default/dockerна хосте, на котором работает демон докера. Точки изменения частного реестра установлены в вашей локальной сети. Примечание: вам потребуется перезапустить службу докеров с последующим изменением.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"
askb
источник
11
Флаг --insecure-registry позволяет докеру извлекать данные из указанного реестра без аутентификации TLS. Он ничего не делает для установки реестра по умолчанию, если он не указан.
Иосия
0

Я добавляю исходный ответ, данный Гаем, который все еще актуален сегодня (скоро 2020 г.).

Переопределение реестра докеров по умолчанию, как и вы maven, на самом деле не является хорошей практикой.

При использовании mavenвы извлекаете артефакты из Maven Central Repository через вашу локальную систему управления репозиторием, которая будет действовать как прокси. Эти артефакты представляют собой простые необработанные библиотеки (jar-файлы), и маловероятно, что вы будете отправлять jar-файлы с тем же именем.

С другой стороны, образы докеров являются полностью работоспособными, запускаемыми средами, и вполне разумно извлечь образ из Docker Hub, изменить его и отправить этот образ в локальную систему управления реестром с тем же именем, потому что это точно как указано в названии, только в контексте вашего предприятия. В этом случае единственным различием между двумя изображениями будет именно его путь !!

Поэтому необходимо установить следующее правило: префикс изображения указывает его происхождение; по умолчанию, если изображение не имеет префикса, оно извлекается из Docker Hub.

avi.elkharrat
источник
Именно по этой причине репозиторий maven, в котором по умолчанию хранятся выпуски, не допускает перезаписи и предлагает классификаторы. Точно так же докер использует теги.
потому что
-5

Не пробовали, но, может быть, перехватить процесс разрешения DNS, добавив строку /etc/hostsдля hub.docker.comили что-то подобное ( docker.io?) Может сработать?

akavel
источник
4
Это взорвется на этапе подключения; сервер, к которому вы подключаетесь, не будет иметь надлежащего сертификата TLS для домена.
Майкл Мол