Comment changer le registre Docker par défaut de docker.io à mon registre privé?

124

Par défaut, si j'émets la commande:

sudo docker pull ruby:2.2.1

il sera extrait du site officiel de docker.io par défaut.

Pulling repository docker.io/library/ruby

Comment puis-je le modifier dans mon registre privé. Cela signifie que si je publie

sudo docker pull ruby:2.2.1

il tirera de mon propre registre privé, la sortie est quelque chose comme:

Pulling repository my_private.registry:port/library/ruby
mainframer
la source
Avez-vous réussi à trouver un moyen de le faire fonctionner? Je cherchais exactement la même chose. J'utilise nexus comme registre privé de docker. Je ne veux pas utiliser mon nom de domaine et mon numéro de port dans ma commande docker pull.
Dinesh

Réponses:

56

MISE À JOUR: Suite à votre commentaire, il n'est actuellement pas possible de modifier le registre par défaut, consultez ce problème pour plus d'informations.

Vous devriez pouvoir le faire, en remplaçant l'hôte et le port par les vôtres:

docker pull localhost:5000/registry-demo

Si le serveur est distant / a une authentification, vous devrez peut-être vous connecter au serveur avec:

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

Puis en cours d'exécution:

docker pull <YOUR-DOMAIN>:8080/test-image
Gars
la source
14
docker pull <YOUR-DOMAIN>:8080/test-imagec'était OK. Mais ce que je veux, c'est docker pull test-image, ce qui est sans spécifier le DOMAINE et le Port et sans connexion.
mainframer
2
J'ai mis à jour ma réponse en fonction de votre commentaire. Il n'est actuellement pas possible de définir un registre par défaut
Guy
Il est peu probable qu'il devienne possible de définir un registre par défaut différent non plus, en raison de la rupture de l'espace de noms par défaut sur lequel reposent la plupart des images
Matt
Ils pourraient faire quelque chose comme @scopesdans npm pour introduire de nouveaux espaces de noms sans conflit avec existant. Le fait d'inclure le nom d'hôte du registre dans le nom de l'image rend difficile la mise en cache / le proxy / le verrouillage du registre au sein d'une entreprise ou d'un projet. Cela le décrit bien: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek
Ce PR semble être la discussion la plus récente sur ce sujet: github.com/moby/moby/pull/34319
Alexander Klimetschek
21

Il s'avère que c'est réellement possible, mais sans utiliser la version authentique de Docker CE ou EE.

Vous pouvez soit utiliser le fork du docker de Red Hat avec l'indicateur '--add-registry' ou vous pouvez créer vous-même le docker à partir des sources avec registry / config.go modifié pour utiliser votre propre espace de noms / index de registre par défaut codé en dur.

Josiah
la source
3
La fourche de RedHat est celle disponible en centos-extras. Merci de m'aider à comprendre pourquoi après le passage à la version docker.io a --add-registrycessé de fonctionner.
chutz le
2
Vous pouvez également utiliser l' --block-registry index.docker.iooption pour vous débarrasser du registre par défaut.
Evan
1
La --add-registry demande d'extraction n'a pas été fusionnée . Cette fonctionnalité a finalement été refusée ( # 11816 ).
Franklin Piat le
9

si vous utilisez la distribution fedora, vous pouvez changer le fichier

/etc/containers/registries.conf

Ajout de domaine docker.io

Bruno Sousa Sabiá
la source
Ce fichier de configuration spécifique à redhat est utilisé pour démarrer dockerd avec --add-registry. La fonctionnalité ne sera pas adoptée par Docker dans la demande d'extraction n'a pas été fusionnée . (également la fonctionnalité a finalement été refusée ( # 11816 ).
Franklin Piat
6

Il semble qu'il ne sera pas pris en charge en raison de la fragmentation qu'il créerait au sein de la communauté (c'est-à-dire que deux utilisateurs obtiendraient des images différentes ubuntu:latest). Vous devez simplement ajouter l'hôte devant le nom de l'image. Consultez ce numéro de github pour rejoindre la discussion.

(Notez que cela ne se veut pas un commentaire d'opinion, juste un très bref résumé de la discussion qui peut être suivie dans le numéro de github mentionné.)

datacarl
la source
10
fragmentation oui mais juste avec les débuts de linux, il n'en est finalement devenu que trois (source base [arch, gentoo, slax, ...], basée sur debian [debian / ubuntu] et basée sur redhat [entreprise linux, rhel, centos]. Il serait préférable d'un point de vue de la sécurité de pouvoir changer le registre en amont par défaut en quelque chose d'autogéré.
Dwight Spencer
2
Dire "il n'y a que trois linux, redhat, debian et source", c'est comme dire "il n'y a que trois fournisseurs de recherche: google, bing et tous les autres fournisseurs de recherche" ...
Chris Browne
4

J'ai essayé d'ajouter les options suivantes dans le fichier /etc/docker/daemon.json. (J'ai utilisé CentOS7)

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

après cela, redémarré le démon docker. Et cela fonctionne sans docker.io. J'espère que ce quelqu'un sera utile.

Jacobdoni
la source
Cette configuration est spécifique à RedHat. La --add-registry demande d'extraction n'a pas été fusionnée .
Franklin Piat le
2

La position officielle de Docker est expliquée dans le numéro 11815 :

Problème 11815: autoriser la spécification des registres par défaut utilisés dans la commande pull

Résolution:

Comme indiqué précédemment (# 11815), cela fragmenterait l'espace de noms et blesserait gravement la communauté, rendant les fichiers docker plus portables.

[le mainteneur] fermera cela pour cette raison.

Red Hat avait une implémentation spécifique qui le permettait (voir réponse, mais elle a été refusée par le projet amont de Docker). Il s'appuyait sur l' --add-registryargument, qui était défini /etc/containers/registries.confsur RHEL / CentOS 7.

Franklin Piat
la source
1

Auparavant, cela pouvait être réalisé en utilisant DOCKER_OPTSle /etc/default/dockerfichier de configuration qui fonctionnait sur Ubuntu 14:04 et avait quelques problèmes sur Ubuntu 15:04. Je ne sais pas si cela a été corrigé.

La ligne ci-dessous doit aller dans le fichier /etc/default/dockersur l'hôte qui exécute le démon docker. Le changement pointe vers le registre privé est installé dans votre réseau local. Remarque: vous devrez redémarrer le service docker suivi de cette modification.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"
askb
la source
11
L'indicateur '--insecure-registry' permet à docker d'extraire du registre nommé sans authentification TLS. Il ne fait rien pour définir un registre par défaut lorsque celui-ci n'est pas spécifié.
Josiah
0

J'ajoute à la réponse originale donnée par Guy qui est toujours valable aujourd'hui (bientôt 2020).

Remplacer le registre Docker par défaut, comme vous le feriez avec maven, n'est en fait pas une bonne pratique.

Lors de l'utilisation maven, vous extrayez des artefacts du référentiel central Maven via votre système de gestion de référentiel local qui agira comme un proxy. Ces artefacts sont des bibliothèques brutes (jars) simples et il est peu probable que vous poussiez des fichiers jar du même nom.

D'un autre côté, les images docker sont entièrement opérationnelles, exécutables, des environnements, et cela rend totalement sens de tirer une image du Docker Hub, de la modifier et de pousser cette image dans votre système de gestion de registre local avec le même nom, car c'est exactement ce que son nom dit, juste dans le contexte de votre entreprise. Dans ce cas, la seule distinction entre les deux images serait justement son chemin !!

D'où la nécessité de fixer la règle suivante: le préfixe d'une image indique son origine; par défaut, si une image n'a pas de préfixe, elle est extraite de Docker Hub.

avi.elkharrat
la source
C'est précisément pour cette raison que le référentiel maven stockant les versions par défaut n'autorise pas l'écrasement et propose des classificateurs. De même, docker utilise des balises.
coz le
-5

Vous n'avez pas essayé, mais peut-être que détourner le processus de résolution DNS en ajoutant une ligne /etc/hostspour hub.docker.comou quelque chose de similaire ( docker.io?) Pourrait fonctionner?

Akavel
la source
4
Cela va exploser dans la phase de connexion; le serveur auquel vous vous connectez n'aura pas de certificat TLS approprié pour le domaine.
Michael Mol