Come modificare il registro docker predefinito da docker.io al mio registro privato?


124

Per impostazione predefinita, se emetto il comando:

sudo docker pull ruby:2.2.1

verrà estratto dal sito ufficiale docker.io per impostazione predefinita.

Pulling repository docker.io/library/ruby

Come posso cambiarlo nel mio registro privato. Ciò significa che se emetto

sudo docker pull ruby:2.2.1

verrà estratto dal mio registro privato, l'output è qualcosa del tipo:

Pulling repository my_private.registry:port/library/ruby

Sei riuscito a trovare un modo per farlo funzionare? Stavo cercando esattamente la stessa cosa. Sto usando Nexus come registro privato del docker. Non voglio usare il mio nome di dominio e il mio numero di porta nel mio comando pull docker.
Dinesh

Risposte:


56

AGGIORNAMENTO: in seguito al tuo commento, al momento non è possibile modificare il registro predefinito, vedere questo problema per maggiori informazioni.

Dovresti essere in grado di farlo, sostituendo l'host e la porta con i tuoi:

docker pull localhost:5000/registry-demo

Se il server è remoto / ha l'autenticazione, potrebbe essere necessario accedere al server con:

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

Quindi in esecuzione:

docker pull <YOUR-DOMAIN>:8080/test-image

14
docker pull <YOUR-DOMAIN>:8080/test-imageera ok. Ma quello che voglio è docker pull test-image, che è senza spesifying il DOMINIO e la porta e senza login.
mainframer

2
Ho aggiornato la mia risposta in base al tuo commento. Al momento non è possibile impostare un registro predefinito
Guy

Non è probabile che sia mai possibile impostare un registro predefinito diverso, a causa del fatto che interrompe lo spazio dei nomi predefinito su cui si basa la maggior parte delle immagini
Matt

Potrebbero fare qualcosa come @scopesin npm per introdurre nuovi spazi dei nomi senza conflitti con quelli esistenti. Avere il nome host del registro incluso nel nome dell'immagine rende difficile la memorizzazione nella cache / proxy / blocco del registro all'interno di un'azienda o di un progetto. Questo lo descrive bene: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek

Questo PR sembra essere la discussione più recente su questo argomento: github.com/moby/moby/pull/34319
Alexander Klimetschek

21

Si scopre che questo è effettivamente possibile, ma non utilizzando la versione originale Docker CE o EE.

È possibile utilizzare il fork di docker di Red Hat con il flag '--add-registry' oppure creare da soli docker dalla sorgente con registry / config.go modificato per utilizzare il proprio spazio dei nomi / index del registro predefinito hardcoded.


3
La forcella di RedHat è quella disponibile in centos-extra. Grazie per avermi aiutato a capire perché dopo il passaggio alla versione docker.io ha --add-registrysmesso di funzionare.
chutz

2
È inoltre possibile utilizzare l' --block-registry index.docker.ioopzione per eliminare il registro predefinito.
Evan

1
La --add-registry richiesta pull non è stata unita . Questa funzione è stata infine rifiutata ( # 11816 ).
Franklin Piat

9

se stai usando la distribuzione fedora, puoi cambiare il file

/etc/containers/registries.conf

Aggiunta del dominio docker.io


Questo file di configurazione specifico per redhat viene utilizzato per avviare dockerd con --add-registry. La funzione non sarà adottata dal Docker richiesta di pull è stato non fusa . (anche la funzione è stata infine rifiutata ( # 11816 )
Franklin Piat

6

Sembra che non sarà supportato a causa della frammentazione che creerebbe all'interno della comunità (cioè due utenti otterrebbero immagini differenti ubuntu:latest). Devi semplicemente aggiungere l'host davanti al nome dell'immagine. Vedi questo problema di GitHub per partecipare alla discussione.

(Nota, questo non è inteso come un commento supponente, solo un brevissimo riassunto della discussione che può essere seguito nel problema gitHub menzionato.)


10
frammentazione sì, ma solo con i primi giorni di linux alla fine ne divennero solo tre (source base [arch, gentoo, slax, ...], debian based [debian / ubuntu] e redhat [enterprise linux, rhel, centos]. Sarebbe meglio da un punto di vista della sicurezza essere in grado di cambiare il registro a monte predefinito con qualcosa di autogestito.
Dwight Spencer

2
Dire "ci sono solo tre linux, redhat, debian e source" è come dire "ci sono solo tre provider di ricerca: google, bing e tutti gli altri provider di ricerca" ...
Chris Browne

4

Ho provato ad aggiungere le seguenti opzioni in /etc/docker/daemon.json. (Ho usato CentOS7)

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

dopodiché, riavviato il demone docker. E funziona senza docker.io. Spero che questo qualcuno ti sia d'aiuto.


Questa configurazione è specifica per RedHat. La --add-registry richiesta pull non è stata unita .
Franklin Piat

2

La posizione ufficiale di Docker è spiegata nel numero 11815 :

Problema 11815: consente di specificare i registri predefiniti utilizzati nel comando pull

Risoluzione:

Come sottolineato in precedenza (# 11815), questo frammenterebbe lo spazio dei nomi e danneggerebbe gravemente la comunità, rendendo i file docker non più portabili.

[il Maintainer] chiuderà questo per questo motivo.

Red Hat aveva un'implementazione specifica che lo consentiva (vedere anwser, ma è stato rifiutato dal progetto upstream di Docker). Si basava su --add-registryargomenti, che erano stati impostati /etc/containers/registries.confsu RHEL / CentOS 7.


1

In precedenza questo poteva essere ottenuto utilizzando DOCKER_OPTSnel /etc/default/dockerfile di configurazione che funzionava su Ubuntu 14:04 e presentava alcuni problemi su Ubuntu 15:04. Non sono sicuro che sia stato risolto.

La riga seguente deve entrare nel file /etc/default/dockersull'host che esegue il demone docker. I punti di modifica al registro privato vengono installati nella rete locale. Nota: è necessario riavviare il servizio Docker seguito da questa modifica.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"

11
Il flag "--insecure-registry" consente a Docker di eseguire il pull dal registro denominato senza autenticazione TLS. Non fa nulla per impostare un registro predefinito quando non è specificato.
Josiah

0

Sto aggiungendo la risposta originale data da Guy che è ancora valida oggi (presto 2020).

Ignorare il registro di finestra mobile predefinito, come faresti con maven, non è in realtà una buona pratica.

Quando si utilizza maven, si estraggono artefatti da Maven Central Repository tramite il sistema di gestione del repository locale che fungerà da proxy. Questi artefatti sono lib (jars) semplici e grezze ed è abbastanza improbabile che spingerete jars con lo stesso nome.

D'altra parte, le immagini docker sono completamente operative, eseguibili, ambienti ed è assolutamente sensato estrarre un'immagine dall'hub Docker, modificarla e inserire questa immagine nel sistema di gestione del registro locale con lo stesso nome, perché è esattamente quello che dice il suo nome, proprio nel contesto della tua azienda. In questo caso l'unica distinzione tra le due immagini sarebbe proprio il suo percorso !!

Da qui la necessità di impostare la seguente regola: il prefisso di un'immagine ne indica l'origine; per impostazione predefinita, se un'immagine non ha un prefisso, viene estratta da Docker Hub.


Proprio per questo motivo il repository maven che memorizza le versioni per impostazione predefinita non consente la sovrascrittura e offre classificatori. Allo stesso modo docker utilizza i tag.
coz

-5

Non ho provato, ma forse dirottare il processo di risoluzione DNS aggiungendo una riga /etc/hostsper hub.docker.como qualcosa di simile ( docker.io?) Potrebbe funzionare?


4
Questo esploderà nella fase di connessione; il server a cui ti connetti non avrà un certificato TLS appropriato per il dominio.
Michael Mol
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.