Jak zmienić domyślny rejestr docker z docker.io na mój prywatny rejestr?

124

Domyślnie, jeśli wydaję polecenie:

sudo docker pull ruby:2.2.1

domyślnie pobierze z oficjalnej strony docker.io.

Pulling repository docker.io/library/ruby

Jak zmienić to na mój prywatny rejestr. To znaczy, jeśli wydam

sudo docker pull ruby:2.2.1

pobierze z mojego prywatnego rejestru, wynik będzie wyglądał mniej więcej tak:

Pulling repository my_private.registry:port/library/ruby
mainframer
źródło
Czy udało Ci się znaleźć sposób, aby to zadziałało? Szukałem dokładnie tego samego. Używam Nexusa jako prywatnego rejestru Dockera. Nie chcę używać mojej nazwy domeny i numeru portu w poleceniu docker pull.
Dinesh

Odpowiedzi:

56

AKTUALIZACJA: po Twoim komentarzu nie można obecnie zmienić domyślnego rejestru. Więcej informacji można znaleźć w tym problemie .

Powinieneś być w stanie to zrobić, zastępując hosta i port własnymi:

docker pull localhost:5000/registry-demo

Jeśli serwer jest zdalny / ma autoryzację, może być konieczne zalogowanie się do serwera za pomocą:

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

Następnie bieganie:

docker pull <YOUR-DOMAIN>:8080/test-image
Chłopak
źródło
14
docker pull <YOUR-DOMAIN>:8080/test-imagebyło ok. Ale to, czego chcę docker pull test-image, to bez określania DOMENY i portu oraz bez logowania.
mainframer
2
Zaktualizowałem moją odpowiedź na podstawie Twojego komentarza. Obecnie nie jest możliwe ustawienie domyślnego rejestru
Guy
Prawdopodobnie nigdy nie będzie możliwe ustawienie innego domyślnego rejestru, ponieważ łamie on domyślną przestrzeń nazw, na której opiera się większość obrazów
Matt
Mogą zrobić coś takiego jak @scopesnpm, aby wprowadzić nowe przestrzenie nazw bez konfliktu z istniejącymi. Umieszczenie nazwy hosta rejestru w nazwie obrazu utrudnia buforowanie rejestru / proxy / blokowanie w firmie lub projekcie. To dobrze to opisuje: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek
Ten PR wydaje się być najnowszą dyskusją na ten temat: github.com/moby/moby/pull/34319
Alexander Klimetschek.
21

Okazuje się, że jest to rzeczywiście możliwe, ale nie przy użyciu oryginalnej wersji Docker CE lub EE.

Możesz albo użyć rozwidlenia dockera Red Hata z flagą `` --add-register '' lub możesz samodzielnie zbudować docker ze źródła z modyfikacją rejestru / config.go, aby używała własnej zakodowanej na stałe domyślnej przestrzeni nazw / indeksu rejestru.

Josiah
źródło
3
Widelec RedHat to ten dostępny w centach-dodatkach. Dziękuję za pomoc w zrozumieniu, dlaczego po przejściu na wersję docker.io --add-registryprzestała działać.
chutz
2
Możesz także skorzystać z --block-registry index.docker.ioopcji pozbycia się domyślnego rejestru.
Evan
1
--add-registry Prośba przyciąganie było nie połączyły . Ta funkcja została ostatecznie odrzucona ( # 11816 ).
Franklin Piat
9

jeśli używasz dystrybucji Fedory, możesz zmienić plik

/etc/containers/registries.conf

Dodawanie domeny docker.io

Bruno Sousa Sabiá
źródło
Ten specyficzny plik konfiguracyjny redhat jest używany do uruchamiania dockerd z --add-registry. Funkcja nie zostanie przyjęta przez platformę Docker w żądaniu ściągnięcia nie została scalona . (również funkcja została ostatecznie odrzucona ( # 11816 )
Franklin Piat
6

Wygląda na to, że nie będzie obsługiwany ze względu na fragmentację, jaką spowodowałaby w społeczności (tj. Dwóch użytkowników otrzymałoby różne obrazy ubuntu:latest). Musisz po prostu dodać hosta przed nazwą obrazu. Zobacz ten numer na githubie, aby dołączyć do dyskusji.

(Uwaga, nie jest to uparty komentarz, tylko bardzo krótkie podsumowanie dyskusji, które można śledzić we wspomnianym numerze github).

datacarl
źródło
10
fragmentacja tak, ale tylko na początku Linuksa ostatecznie pojawiły się tylko trzy (source base [arch, gentoo, slax, ...], oparty na Debianie [debian / ubuntu] i oparty na redhat [enterprise linux, rhel, centos]. byłoby lepiej z punktu widzenia bezpieczeństwa, aby móc zmienić domyślny upstream rejestru siebie coś udało.
Dwight Spencer
2
Powiedzenie „są tylko trzy linuksy, redhat, debian i źródło” to tak, jakby powiedzieć „są tylko trzej dostawcy wyszukiwania: google, bing i wszyscy inni dostawcy wyszukiwania” ...
Chris Browne
4

Próbowałem dodać następujące opcje w /etc/docker/daemon.json. (Użyłem CentOS7)

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

po tym zrestartowano demona Dockera. I działa bez docker.io. Mam nadzieję, że ten ktoś będzie pomocny.

jacobdoni
źródło
Ta konfiguracja jest specyficzna dla RedHat. --add-registry Prośba przyciąganie było nie połączyły .
Franklin Piat
2

Oficjalne stanowisko Dockera zostało wyjaśnione w numerze 11815 :

Problem 11815: Zezwalaj na określenie rejestrów domyślnych używanych w poleceniu ściągania

Rozkład:

Jak wskazano wcześniej (# 11815), spowodowałoby to fragmentację przestrzeni nazw i bardzo poważnie zraniło społeczność, sprawiając, że pliki dockerfile nie były już przenośne.

[Opiekun] zamknie to z tego powodu.

Red Hat miał określoną implementację, która na to pozwalała (patrz anwser, ale została odrzucona przez projekt Docker upstream). Opierał się na --add-registryargumencie, który został ustawiony /etc/containers/registries.confna RHEL / CentOS 7.

Franklin Piat
źródło
1

Wcześniej można to osiągnąć stosując DOCKER_OPTSw /etc/default/dockerpliku konfiguracyjnym, który pracował na Ubuntu 14:04 i miał pewne problemy na Ubuntu 15:04. Nie jestem pewien, czy zostało to naprawione.

Poniższa linia musi trafić do pliku /etc/default/dockerna hoście, na którym działa demon Dockera. Zmiana wskazuje na prywatny rejestr jest zainstalowany w sieci lokalnej. Uwaga: konieczne będzie ponowne uruchomienie usługi docker po wprowadzeniu tej zmiany.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"
askb
źródło
11
Flaga „--insecure-register” umożliwia oprogramowaniu Docker pobieranie z wymienionego rejestru bez uwierzytelniania TLS. Nie robi nic w kierunku ustawienia domyślnego rejestru, jeśli nie jest on określony.
Josiah
0

Dodam do oryginalnej odpowiedzi udzielonej przez Guya, która jest nadal aktualna dzisiaj (wkrótce 2020).

Zastępowanie domyślnego rejestru docker, tak jak w przypadku, nie mavenjest w rzeczywistości dobrą praktyką.

W przypadku korzystania mavenz niego artefakty są pobierane z repozytorium Maven Central za pośrednictwem lokalnego systemu zarządzania repozytorium, który będzie pełnił rolę serwera proxy. Te artefakty są zwykłymi, surowymi bibliotekami (słoikami) i jest mało prawdopodobne, abyś wypychał pliki jar o tej samej nazwie.

Z drugiej strony, obrazy Dockera są w pełni operacyjne, uruchamialne, środowiska i całkowicie sensowne jest pobranie obrazu z Docker Hub, zmodyfikowanie go i wypchnięcie tego obrazu do lokalnego systemu zarządzania rejestrami o tej samej nazwie, ponieważ jest to dokładnie jak mówi jego nazwa, tylko w kontekście przedsiębiorstwa. W tym przypadku jedyną różnicą między tymi dwoma obrazami byłaby właśnie jego ścieżka !!

Stąd potrzeba ustalenia zasady: prefiks obrazu wskazuje jego pochodzenie; Domyślnie, jeśli obraz nie ma prefiksu, jest pobierany z Docker Hub.

avi.elkharrat
źródło
Z tego właśnie powodu repozytorium Maven domyślnie przechowujące wydania nie pozwala na nadpisywanie i oferuje klasyfikatory. Podobnie docker używa tagów.
coz
-5

Nie próbowałem, ale może przejęcie procesu rozpoznawania nazw DNS przez dodanie linii /etc/hostsdla hub.docker.comlub coś podobnego ( docker.io?) Może zadziałać?

akavel
źródło
4
To wybuchnie na etapie łączenia; serwer, z którym się łączysz, nie będzie miał odpowiedniego certyfikatu TLS dla domeny.
Michael Mol,