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
Mainframer
quelle
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
Kerl
quelle
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.

Josiah
quelle
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

Bruno Sousa Sabiá
quelle
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.)

datacarl
quelle
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.

Jacobdoni
quelle
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.

Franklin Piat
quelle
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>"
askb
quelle
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.

avi.elkharrat
quelle
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?

akavel
quelle
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