Wie erhalte ich Fernzugriff auf eine private Docker-Registrierung?

81

Ich versuche, eine private Docker-Registrierung mithilfe des folgenden Images einzurichten: https://github.com/docker/docker-registry

Nur durch Laufen:
docker run -p 5000:5000 registry

Ich kann nur von localhost aus / in dieses Repository ziehen / pushen, aber wenn ich versuche, von einem anderen Computer (unter Verwendung einer privaten Adresse im selben LAN) darauf zuzugreifen, schlägt dies mit einer Fehlermeldung fehl:

*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/': 
Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private 
registry supports only HTTP or HTTPS with an unknown CA certificate,
please add `--insecure-registry 10.0.0.26:5000` to the daemon's 
arguments. In the case of HTTPS, if you have access to the registry's
CA certificate, no need for the flag; simply place the CA certificate 
at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*

Was mich verrückt macht, ist, dass ich mit: curl 10.0.0.26:5000 und / oder erfolgreich darauf zugreifen kann curl 10.0.0.26:5000/v1/search

Ich verstehe auch nicht, wo und wie ich die --insecure-registryFlagge passieren soll .

Ofer Eliassaf
quelle
3
Viele der Antworten scheinen für Docker 1.12 veraltet zu sein, aber siehe vikas027 Antwort, die für Docker 1.12 (neueste ATOW)
großartig ist
1
Unter Ubuntu haben die Docker-Dokumentation und diese Antwort für mich gut funktioniert.
Batandwa

Antworten:

73

OK - ich habe die Lösung dafür gefunden - nach einem Tag des Grabens.

Für Docker unter 1.12.1:

Es stellt sich heraus, dass die neue Client-Version die Arbeit mit einer privaten Registrierung ohne SSL verweigert.

Um dies zu beheben, sollte der Dämon auf dem Clientcomputer mit dem unsicheren Flag gestartet werden:

Schreib einfach:

sudo service docker stop # to stop the service

und dann

sudo docker -d --insecure-registry 10.0.0.26:5000

(Ersetzen Sie die 10.0.0.26durch Ihre eigene IP-Adresse).

Ich würde erwarten, dass die Docker-Leute diese Option zur Pull / Push-Befehlszeile hinzufügen ...

Bearbeiten - alternativ - Sie können das Flag der DOCKER_OPTSenv-Variablen in / etc / default / docker hinzufügen ... und dannsudo service docker restart

Erneut bearbeiten - Es scheint, dass die Docker-Leute dabei sind - und eine Lösung wird bald kommen: https://github.com/docker/docker/pull/8935

Für Docker 1.12.1:

Bitte folgen Sie unten der Antwort von vikas027 (gültig für Centos)

Ofer Eliassaf
quelle
Ich konnte Ihre Schritte replizieren und in eine private Registrierung auf einem Remote-Host verschieben. Es zeigte auch erfolgreichen Push. Wie liste ich jedoch Bilder in der privaten Registrierung auf? Ich habe es versucht docker -H tcp://remote-host-ip:5000 images, bin aber mit Fehler zurückgekehrt.
Howard Lee
Ich kann überprüfen, ob dies passiert. Es passiert auch, wenn Sie <ip>: 5000 / v1 / search abfragen - Sie erhalten eine leere Antwort. Wahrscheinlich ein anderer Fehler, den sie haben :-(
Ofer Eliassaf
Update: Ich konnte Bilder suchen / ziehen, die in einer privaten Remote-Registrierung gespeichert waren. docker search remote-host-ip:5000/image-nameund docker pull remote-host-ip:5000/image-namebeide funktionieren einwandfrei. Nun, wie bekomme ich es, um die Bilder
Howard Lee
3
@ashleyaitken, ich habe die folgende Referenz verwendet, um mit Boot2Docker zu lösen: github.com/boot2docker/boot2docker#insecure-registry . Hoffentlich hilft das.
Patelify
1
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh
28

Dies hat bei mir unter CentOS 7.2 und Docker 1.12.1 funktioniert (Stand: Datum). Meine private Registrierung v2 wurde ausgeführt 192.168.1.88:5000. Ändern Sie sie entsprechend. Dies funktioniert auch, wenn Sie mehrere Registrierungen haben. Fügen Sie einfach weitere hinzu--insecure-registry IP:Port

$ sudo vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd 
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000
$
$ sudo systemctl stop docker
$ sudo systemctl daemon-reload
$ systemctl start docker
vikas027
quelle
1
Diese Lösung war die einzige, die unter Ubuntu für mich funktioniert hat.
JARC
1
Danke Mann - hat großartig funktioniert - hat eine umfassendere Antwort hinzugefügt, die darauf basiert, für diejenigen, die hinter einem Unternehmens-Proxy stehen
danday74
2
Hat für mich funktioniert, aber docker.service war in /lib/systemd/system/docker.serviceUbuntu 16.04.
Karim Tabet
4
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh - Wiedereinsetzung Monica
1
Arbeit. Oder Sie müssen Ihr gesamtes System hacken (eine andere ähnliche "Funktion" ist, dass "Bridged Networking" tatsächlich NAT-Networking im Docker bedeutet, während ein echtes Bridged Network einfach nicht existiert). Diese Antworten machen schreckliche Problemumgehungen für große Probleme populär, die leicht behoben werden könnten, aber irgendwie nicht. Dies war der Grund, warum ich sie alle abgelehnt habe - alle sind schlechte Lösungen.
Peter
24

Bearbeiten Sie die Konfigurationsdatei "/ etc / default / docker".

sudo vi / etc / default / docker

Fügen Sie die Zeile am Ende der Datei hinzu

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-registry = 192.168.2.170: 5000"

(Ersetzen Sie die 192.168.2.170 durch Ihre eigene IP-Adresse)

und starten Sie den Docker-Dienst neu

sudo service docker neu starten

Daozhao
quelle
Vielen Dank! Bearbeitung /etc/init.d/dockernur Vollgas nicht auf Ubuntu 14.04 nicht funktioniert, überraschend. Aber Ihr Fix zu /etc/default/dockertut.
elimisteve
Mein Host-System ist auch Ubuntu 14.04
Daozhao
1
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh - Wiedereinsetzung Monica
12

OK. Hier ist, wie ich es zum Laufen gebracht habe. Wenn Sie diesen Fehler in Docker 1.3.2 oder höher sehen, tun Sie dies

gehe zu /etc/sysconfig/docker

other_args="--insecure-registry 10.0.0.26:5000"

und Renn

sudo service docker restart

Jay
quelle
1
Sie müssen ein '=' setzen, um den Registrierungswert unter Ubuntu zu beeinflussen: "- unsichere Registrierung = 10.0.0.26: 5000"
Romain Jouin
@ Jay Ich bin ein Noob. 1.3.2 klingt nach einer zukünftigen Version von Docker. Ich sehe, dass die aktuelle Version 1.12 github.com/docker/docker/releases ist, wenn ich mich hier nicht irre.
Ravindrab
1
@ravindrab in welchem ​​Universum ist 12 kleiner als 3? ;)
ferrari2k
2
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh - Wiedereinsetzung Monica
im Universum der Mathematik, 1.12 <1.3
Nick Perkins
12

Ich fand das Folgende sehr nützlich, da es beschreibt, wie der Docker-Dienst selbst konfiguriert ist. https://docs.docker.com/articles/systemd/

Zusammen mit diesem Artikel über den systemctl-Befehl https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Ich habe die folgende Befehlsreihe in einem Centos 7-basierten Container mit einem Registrierungsabbild verwendet, das von "Docker Pull Registry: 2.1.1" erhalten wurde.

sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
sudo touch override.conf
sudo nano override.conf

Und in der override.conf wurde Folgendes hinzugefügt.

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

Beachten Sie, dass mit dem ersten leeren ExecStart = alles gelöscht wird, was bereits vorhanden ist. Fügen Sie daher unbedingt etwas aus der Anweisung /usr/lib/systemd/system/docker.service ExecStart = hinzu, das Sie beibehalten möchten.

Wenn Sie die Option -d (Daemon) nicht angeben, wird der Fehler "Bitte nur ein -H angeben" angezeigt.

Nachdem ich die folgende Befehlsreihe ausgegeben habe, kann ich sehen, dass meine Überschreibungen vorhanden sind.

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl status docker

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─override.conf
   Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 5697 (docker)
   CGroup: /system.slice/docker.service
           └─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

ANMERKUNG: Die Informationen in den Zeilen Loaded: und Drop-In: in der Statusmeldung sind nützlich, um zu überprüfen, was mit einem bereits vorhandenen Docker-Daemon funktioniert.

HINWEIS: Suchen Sie auch in der Datei Loaded: docker.service nach einer EnvironmentFile =, um weitere Hinweise zu erhalten.

TJA
quelle
2
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh - Wiedereinsetzung Monica
Hallo @peterh, ich verstehe, dass es eine Problemumgehung und eine unsichere ist. Ich habe keinen Zweifel, dass es Produktionssysteme gibt, die es verwenden, was in der Tat eine sehr schlechte Sache ist.
TJA
1
@peterh können Sie mich bitte auf Links verweisen, die zeigen, wie es richtig gemacht wird, und ich werde meine Antwort aktualisieren und auf den Link verweisen.
TJA
9

Verwenden Sie den folgenden Befehl, um {YOUR_REGISTRY} durch Ihre Registrierung zu ersetzen

boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"
JaTo
quelle
boot2dockerist ein unabhängiges Toolkit, das für den Fragenkontext irrelevant ist.
Arnaud Meuret
2
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh - Wiedereinsetzung Monica
7

Bearbeiten Sie die Datei docker.service, fügen Sie --insecure-registry xxxx nach dem Flag -d hinzu und starten Sie Docker neu

Dies ist das einzige, was für mich funktioniert hat, die DOCKER_OPTS hatten keine Wirkung

Diman
quelle
Alles, was Sie sagen, ist wahr, aber das Detail ist so spärlich, dass die Antwort fast nutzlos ist
danday74
2
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh
4

Docker 1.12.1

Für CentOS 7.2

/usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000

Für Ubuntu 16.04

/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

Es scheint, dass die Option --insecure-registry sowohl mit als auch ohne das "=" zwischen ihr und der Registrierungs-ID verwendet werden kann.

tedwards
quelle
2
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh
2

Ich habe festgestellt, dass die Docker-Client-Version und die Registrierungs-Docker-Version übereinstimmen müssen, da sonst Konnektivitätsprobleme auftreten, obwohl alles vorhanden ist.

Saikrishna Rao
quelle
2

Zweistufige Lösung (ohne --insecure-registry):

  1. Laden Sie den öffentlichen Schlüssel aus Ihrer Registrierung herunter
  2. Legen Sie es in ein /etc/docker/certs.d/$HOSTNAME/Verzeichnis

 

mkdir -p /etc/docker/certs.d/10.0.0.26:5000
echo -n | openssl s_client -connect 10.0.0.26:5000 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/10.0.0.26:5000/registry.crt

Jetzt vertraut Ihr Docker Ihrem selbstsignierten Zertifikat.

vp_arth
quelle
1

Dies basiert auf der Antwort von vikas027 auf Centos 7 und Docker 1.12

Da ich hinter einem Proxy stehe, war meine vollständige Lösung ...

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="FTP_PROXY={{MY_PROXY}}"
Environment="ftp_proxy={{MY_PROXY}}"

Environment="HTTPS_PROXY={{MY_PROXY}}"
Environment="https_proxy={{MY_PROXY}}"

Environment="HTTP_PROXY={{MY_PROXY}}"
Environment="http_proxy={{MY_PROXY}}"

Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"

/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000

und nicht vergessen neu zu starten :)

sudo systemctl daemon-reload; sudo systemctl restart docker;
danday74
quelle
1
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh
0

Festlegen der lokalen unsicheren Registrierung im Docker zusammen mit dem Proxy:

1) Fügen Sie in Ubuntu das folgende Flag hinzu - IP der unsicheren Registrierung: Port unter DOCKER_OPTS in der Datei / etc / default / docker

1.1) Konfigurieren Sie die Umgebungsvariable no_proxy so, dass die lokale IP / der Hostname / der Domänenname umgangen wird, da der Proxy eine interaktive Nachricht auslösen kann.

1.2) Wenn der Domänenname konfiguriert ist, vergessen Sie nicht, die Datei / etc / hosts zu aktualisieren, wenn Sie kein DNS verwenden.

1.3) Legen Sie in / etc / default / docker die env-Variablen http_proxy und https_proxy ... fest, damit Bilder von externen Firmen-Hubs heruntergeladen werden können. Format http_proxy = http: // Benutzername: Passwort @ Proxy: Port

2) Starten Sie den Docker-Dienst neu. Wenn Sie als Dienst installiert sind, verwenden Sie den Docker-Neustart des Sudo-Dienstes

3) Starten Sie den Registrierungscontainer neu [sudo docker run -p 5000: 5000 Registrierung: 2]

4) Markieren Sie das gewünschte Image mit dem sudo docker tag imageid IP: port / imagename / tagname ifany

5) Schieben Sie das Bild ... Sudo Docker Push IP: Port / Bildname

6) Wenn Sie das Image von einem anderen Computer abrufen möchten, z. B. B ohne TLS / SSL, dann wenden Sie in B die Setps 1.1.1 und 2 an. Wenn diese Änderungen in Computer B nicht vorgenommen werden, schlägt das Ziehen fehl.

Ragha
quelle
2
--insecure-registryist eine Problemumgehung und keine Lösung.
Peterh
0

Ubuntu 16.04

Datei /etc/systemd/system/docker.service.d/registry.confmit Inhalt erstellen (existiert nicht) :

[Service]
#You need the below or you 'ExecStart=' or you will get and error 'Service has more than one ExecStart= setting, which is only allowed'
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000

dann

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker
danday74
quelle
0

Zusätzlich zu den obigen Antworten füge ich hinzu, was in "Docker für Mac" für mich funktioniert hat:

  1. Klicken Sie in der oberen rechten Ecke Ihres Bildschirms auf das Docker-Wal-Symbol in der Mac-Taskleiste.
  2. Klicken Sie auf Einstellungen -> Daemon .
  3. Fügen Sie Ihre IP und Ihren Port zu den unsicheren Registern hinzu.
  4. Starten Sie den Daemon neu.

Geben Sie hier die Bildbeschreibung ein

Parantap Sharma
quelle