Як змінити реєстр docker за замовчуванням з 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

Чи вдалося вам знайти спосіб змусити його працювати? Я шукав точно те саме. Я використовую Nexus як приватний реєстр докер. Я не хочу використовувати своє доменне ім’я та номер порту в моїй команді тягнення докера.
Дінеш

Відповіді:


56

ОНОВЛЕННЯ: Після Вашого коментаря наразі неможливо змінити реєстр за замовчуванням, див. Цю проблему для отримання додаткової інформації.

Ви повинні зробити це, замінивши хост і порт на свої:

docker pull localhost:5000/registry-demo

Якщо сервер віддалений / має auth, можливо, вам доведеться увійти на сервер за допомогою:

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-реєстр' або ви можете створити докер з джерела самостійно за допомогою реєстру / config.go, модифікованого для використання власного жорсткого коду простору імен реєстру за замовчуванням.


3
Вилка RedHat - це така, яка доступна у центрі-екстри. Дякуємо, що допомогли мені зрозуміти, чому після переходу на docker.io версія --add-registryперестала працювати.
chutz

2
Ви також можете скористатися --block-registry index.docker.ioопцією, щоб позбутися реєстру за замовчуванням.
Еван

1
--add-registry Запит тягнути було не зливалися . Ця функція в кінцевому підсумку була відмовлена ​​( # 11816 ).
Франклін Піат

9

якщо ви використовуєте дистрибутив Fedora, ви можете змінити файл

/etc/containers/registries.conf

Додавання домену docker.io


Цей специфічний конфігураційний файл redhat використовується для запуску докерда --add-registry. Ця функція не буде прийнята Докером у запиті на виклик не було об'єднано . (також в кінцевому підсумку відмовились ( # 11816 ).
Franklin Piat

6

Здається, він не буде підтримуватися через фрагментацію, яку він створив би у спільноті (тобто двоє користувачів отримують різні зображення ubuntu:latest). Вам просто потрібно додати хоста перед іменем зображення. Перегляньте цей випуск github, щоб приєднатися до дискусії.

(Зауважте, це не задумливий коментар, а лише короткий підсумок дискусії, яку можна прослідкувати у згаданому випуску github.)


10
фрагментація так, але лише з першими днями linux там врешті-решт стало лише три (джерельна база [арка, 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. Я сподіваюся, що це комусь буде корисним.


Ця конфігурація характерна для RedHat. --add-registry Запит тягнути було не зливалися .
Франклін Піат

2

Офіційна позиція Докера пояснюється у випуску № 11815 :

Випуск 11815: Дозволити вказувати регістри за замовчуванням, які використовуються в команді pull

Роздільна здатність:

Як зазначалося раніше (# 11815), це роздробить простір імен та зашкодить спільноті досить сильно, зробивши dockerfiles більше не портативними.

[Maintainer] закриє це з цієї причини.

Red Hat мав специфічну реалізацію, яка дозволила це (див. Вище, але Докер відмовив від проекту). Він спирався на --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>"

11
Прапор '--insecure-register' дозволяє докеру вийти з названого реєстру без аутентифікації TLS. Це нічого не робить для встановлення реєстру за замовчуванням, коли його не вказано.
Йосія

0

Я додаю до оригінальної відповіді, даної Гаєм, яка діє і сьогодні (незабаром 2020 року).

Переосмислення реєстру докерів за замовчуванням, як ви це робили maven, насправді не є хорошою практикою.

Під час використання mavenвитягуєте артефакти з центрального сховища Maven через локальну систему управління сховищами, яка буде виконувати функції проксі. Ці артефакти - це звичайні, сирі лійки (банки), і навряд чи ви будете штовхати банки з такою ж назвою.

З іншого боку, зображення докера є повністю операційними, керованими, середовищами, і це робить цілком сенс витягнути зображення з Docker Hub, змінити його та надіслати це зображення у вашій локальній системі управління реєстром з такою ж назвою, тому що це точно як говорить його назва, саме у вашому бізнесі. У цьому випадку єдиною відмінністю двох зображень було б саме його шлях !!

Тому потрібно встановити таке правило: префікс зображення вказує на його походження; за замовчуванням, якщо зображення не має префікса, воно витягується з Docker Hub.


Точно з цієї причини сховище Maven, що зберігає випуски за замовчуванням, не дозволяє перезаписати і пропонує класифікатори. Аналогічно докер використовує теги.
coz

-5

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


4
Це підірветься на етапі з'єднання; сервер, до якого ви підключаєтесь, не матиме відповідного сертифіката TLS для домену.
Майкл Мол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.