Як змінити реєстр 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.