Wie ändere ich die Standard-Docker-Registrierung von docker.io in meine private Registrierung?


124

Standardmäßig, wenn ich einen Befehl gebe:

sudo docker pull ruby:2.2.1

Es wird standardmäßig von der offiziellen Website docker.io abgerufen.

Pulling repository docker.io/library/ruby

Wie ändere ich es in meine private Registrierung? Das heißt, wenn ich ausstelle

sudo docker pull ruby:2.2.1

es wird aus meiner eigenen privaten Registrierung gezogen, die Ausgabe ist so etwas wie:

Pulling repository my_private.registry:port/library/ruby

Konnten Sie einen Weg finden, es zum Laufen zu bringen? Ich suchte genau das Gleiche. Ich verwende Nexus als private Docker-Registrierung. Ich möchte meinen Domainnamen und meine Portnummer nicht in meinem Docker-Pull-Befehl verwenden.
Dinesh

Antworten:


56

UPDATE: Nach Ihrem Kommentar ist es derzeit nicht möglich, die Standardregistrierung zu ändern. Weitere Informationen finden Sie in diesem Problem .

Sie sollten in der Lage sein, den Host und den Port durch Ihren eigenen zu ersetzen:

docker pull localhost:5000/registry-demo

Wenn der Server remote ist / über eine Authentifizierung verfügt, müssen Sie sich möglicherweise mit folgendem Server anmelden:

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

Dann laufen:

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

14
docker pull <YOUR-DOMAIN>:8080/test-imagewar in Ordnung. Aber was ich will ist docker pull test-image, was ohne DOMAIN und Port zu spezifizieren und ohne Login.
Mainframer

2
Ich habe meine Antwort basierend auf Ihrem Kommentar aktualisiert. Es ist derzeit nicht möglich, eine Standardregistrierung festzulegen
Guy

Es wird wahrscheinlich auch nie möglich sein, eine andere Standardregistrierung festzulegen, da dies den Standard-Namespace verletzt, auf den sich die meisten Bilder verlassen
Matt

Sie könnten so etwas wie @scopesin npm tun , um neue Namespaces ohne Konflikt mit bestehenden einzuführen. Wenn der Hostname der Registrierung im Image-Namen enthalten ist, wird das Zwischenspeichern / Proxying / Sperren der Registrierung innerhalb eines Unternehmens oder Projekts schwierig. Dies beschreibt es gut: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek

Diese PR scheint die jüngste Diskussion zu diesem Thema zu sein: github.com/moby/moby/pull/34319
Alexander Klimetschek

21

Es stellt sich heraus , dies ist tatsächlich möglich, aber nicht die Original-Docker CE oder EE - Version.

Sie können entweder Red Hocks Docker-Fork mit dem Flag '--add-registry' verwenden oder Docker aus der Quelle selbst erstellen, wobei registry / config.go so geändert wurde, dass Ihr eigener fest codierter Standard-Registrierungs-Namespace / -Index verwendet wird.


3
Die Gabel von RedHat ist in Centos-Extras erhältlich. Vielen Dank, dass Sie mir geholfen haben zu verstehen, warum nach dem Wechsel zur docker.io-Version nicht --add-registrymehr funktioniert.
Chutz

2
Sie können die --block-registry index.docker.ioOption auch verwenden , um die Standardregistrierung zu entfernen.
Evan

1
Die --add-registry Pull-Anfrage wurde nicht zusammengeführt . Diese Funktion wurde letztendlich abgelehnt ( # 11816 ).
Franklin Piat

9

Wenn Sie die Fedora-Distribution verwenden, können Sie die Datei ändern

/etc/containers/registries.conf

Hinzufügen der Domain docker.io


Diese redhat-spezifische Konfigurationsdatei wird verwendet, um dockerd mit zu starten --add-registry. Das Feature wird nicht von Docker in angenommen wird Pull - Anforderung wurde nicht verschmolzen . (Auch Feature wurde letztendlich abgelehnt ( # 11816 ).
Franklin Piat

6

Es scheint, dass es aufgrund der Fragmentierung innerhalb der Community nicht unterstützt wird (dh zwei Benutzer würden unterschiedliche Bilder erhalten ubuntu:latest). Sie müssen lediglich den Host vor dem Bildnamen hinzufügen. Sehen Sie sich dieses Github-Problem an, um an der Diskussion teilzunehmen .

(Beachten Sie, dass dies kein Kommentar ist, sondern nur eine sehr kurze Zusammenfassung der Diskussion, die in der erwähnten Github-Ausgabe verfolgt werden kann.)


10
Fragmentierung ja, aber gerade mit den Anfängen von Linux wurden es schließlich nur drei (Quellbasis [arch, gentoo, slax, ...], debianbasiert [debian / ubuntu] und redhatbasiert [Enterprise Linux, Rhel, Centos). Unter Sicherheitsgesichtspunkten wäre es besser, die Standard-Upstream-Registrierung in eine selbstverwaltete Registrierung ändern zu können.
Dwight Spencer

2
Zu sagen "es gibt nur drei Linuxe, Redhat, Debian und Source" ist wie zu sagen "es gibt nur drei Suchanbieter: Google, Bing und alle anderen Suchanbieter" ...
Chris Browne

4

Ich habe versucht, die folgenden Optionen in /etc/docker/daemon.json hinzuzufügen. (Ich habe CentOS7 verwendet)

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

Danach wurde der Docker-Daemon neu gestartet. Und es funktioniert ohne docker.io. Ich hoffe dieser jemand wird hilfreich sein.


Diese Konfiguration ist spezifisch für RedHat. Die --add-registry Pull-Anfrage wurde nicht zusammengeführt .
Franklin Piat

2

Die offizielle Position von Docker wird in Ausgabe Nr. 11815 erläutert :

Problem 11815: Ermöglichen die Angabe von Standardregistern, die im Pull-Befehl verwendet werden

Auflösung:

Wie bereits erwähnt (# 11815), würde dies den Namespace fragmentieren und die Community ziemlich stark verletzen, sodass Docker-Dateien nicht mehr portabel sind.

[der Betreuer] wird dies aus diesem Grund schließen.

Red Hat hatte eine spezifische Implementierung, die dies erlaubte (siehe Antwort, aber es wurde von Docker Upstream Projet abgelehnt ). Es stützte sich auf --add-registryArgumente, die in /etc/containers/registries.confRHEL / CentOS 7 enthalten waren.


1

Früher konnte dies mit DOCKER_OPTSder /etc/default/dockerKonfigurationsdatei erreicht werden, die unter Ubuntu 14:04 funktionierte und einige Probleme hatte Ubuntu 15:04 . Ich bin mir nicht sicher, ob dies behoben wurde.

Die folgende Zeile muss in die Datei /etc/default/dockerauf dem Host eingefügt werden, auf dem der Docker-Daemon ausgeführt wird. Die Änderungspunkte zur privaten Registrierung werden in Ihrem lokalen Netzwerk installiert. Hinweis: Sie müssten den Docker-Dienst neu starten, gefolgt von dieser Änderung.

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

11
Mit dem Flag '--insecure-registry' kann Docker ohne TLS-Authentifizierung aus der benannten Registrierung abrufen. Es wird nichts unternommen, um eine Standardregistrierung festzulegen, wenn keine angegeben ist.
Josiah

0

Ich addiere mich zu der ursprünglichen Antwort von Guy, die heute (bald 2020) noch gültig ist.

Das Überschreiben der Standard-Docker-Registrierung, wie Sie es tun würden maven, ist eigentlich keine gute Praxis.

Beim Benutzen maven ziehen Sie Artefakte aus dem Maven Central Repository über Ihr lokales Repository-Verwaltungssystem, das als Proxy fungiert. Diese Artefakte sind einfache, rohe Bibliotheken (Gläser), und es ist ziemlich unwahrscheinlich, dass Sie Gläser mit demselben Namen verschieben.

Auf der anderen Seite sind Docker-Images voll funktionsfähig, ausführbar und in Umgebungen, und es ist absolut sinnvoll, ein Image aus dem Docker Hub abzurufen, zu ändern und dieses Image in Ihr lokales Registrierungsverwaltungssystem mit demselben Namen zu übertragen, da es genau so ist Wie der Name schon sagt, nur in Ihrem Unternehmenskontext. In diesem Fall wäre der einzige Unterschied zwischen den beiden Bildern genau ihr Weg !!

Daher muss die folgende Regel festgelegt werden: Das Präfix eines Bildes gibt seinen Ursprung an; Wenn ein Image kein Präfix hat, wird es standardmäßig aus Docker Hub abgerufen.


Aus genau diesem Grund erlaubt das Speichern von Releases im Maven-Repository standardmäßig kein Überschreiben und bietet Klassifizierer an. In ähnlicher Weise verwendet Docker Tags.
Coz

-5

Sie haben es noch nicht versucht, aber vielleicht könnte der DNS-Auflösungsprozess durch Hinzufügen einer Zeile /etc/hostsfür hub.docker.comoder etwas Ähnliches ( docker.io?) Entführt werden?


4
Das wird in der Verbindungsphase explodieren; Der Server, zu dem Sie eine Verbindung herstellen, verfügt nicht über ein ordnungsgemäßes TLS-Zertifikat für die Domäne.
Michael Mol
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.