2015-05-11 6 views
9

Hat jemand versucht mit Umgebungsvariablen zu überschreiben Konfigurationsoptionen in der Registrierung, sagen Sie, wenn Sie s3 Bucket als Speicher zum Beispiel verwenden müssen. Ich lese die doc, und es sagt (https://docs.docker.com/registry/configuration/):Docker Registrierung: 2.0 überschreiben Konfigurationsoptionen

Overriding configuration options 
Environment variables may be used to override configuration parameters other than 
version. To override a configuration option, create an environment variable named 
REGISTRY_variable_ where variable is the name of the configuration option. 

e.g 

REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/tmp/registry/test 

will set the storage root directory to /tmp/registry/test 

Also habe ich versucht, diesen Befehl, aber es scheint keine Wirkung zu haben, wenn ich die Registrierung beginnen:

docker run -it -v /var/log/docker-registry:/var/log -p 5000:5000 \ 
-e REGISTRY_STORAGE_S3_ACCESSKEY=****************** \ 
-e REGISTRY_STORAGE_S3_SECRETKEY=****************** \ 
-e REGISTRY_STORAGE_S3_BUCKET=itmcc-docker-registry-backend \ 
-e REGISTRY_STORAGE_S3_REGION=us-east-1 \ 
registry:2.0 

In den Protokollen I finden sie in der regulären Ausgabe, als ob es nicht die env Variablen nicht berücksichtigt und versuchen, S3 zu verbinden:

INFO[0000] endpoint local-8082 disabled, skipping  environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0 
INFO[0000] endpoint local-8083 disabled, skipping  environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0 
INFO[0000] using inmemory layerinfo cache    environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0 
INFO[0000] listening on :5000       environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0 
INFO[0000] Starting upload purge in 42m0s    environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0 
INFO[0000] debug server listening localhost:5001 

PS: wenn ich eine IAM-Rolle mit meiner EC2 verwenden, ist es überflüssig scheint beim Zugang zu passieren und geheimer Schlüssel zu Docker Registrierungscontainer, kann Docker die IAM-Rolle noch nutzen, hat jemand das versucht?

Edit: Nachdem ich laufe Container und den Befehl exec Ausgabe von env zu sehen:

[email protected]:/go/src/github.com/docker/distribution# env 
REGISTRY_STORAGE_S3_SECRETKEY=************************* 
DISTRIBUTION_DIR=/go/src/github.com/docker/distribution 
GOLANG_VERSION=1.4.2 
HOSTNAME=0a349294f792 
REGISTRY_STORAGE_S3_BUCKET=itmcc-docker-registry-backend 
PATH=/go/bin:/usr/src/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
PWD=/go/src/github.com/docker/distribution 
REGISTRY_STORAGE_S3_REGION=us-east-1 
SHLVL=1 
HOME=/root 
GOPATH=/go/src/github.com/docker/distribution/Godeps/_workspace:/go 
REGISTRY_STORAGE_S3_ACCESSKEY=************************* 
_=/usr/bin/env 
[email protected]:/go/src/github.com/docker/distribution# 
+0

Können Sie bitte 'exec -it'myContainer/bin/bash (oder was auch immer Ihr Containername ist) andocken und den Inhalt von' env' hier ablegen? Ich kann AWS S3-Anmeldeinformationen über Umgebungsvariablen einspeisen. – L0j1k

+0

Bitte sehen Sie OP unter "Bearbeiten" (letzter Abschnitt) – alexfvolk

Antwort

14

Der komplette Befehl, der für mich von einem docker run Befehl funktioniert, ist:

docker run -d -p 5000:5000 \ 
-e "REGISTRY_STORAGE=s3" \ 
-e "REGISTRY_STORAGE_S3_REGION=us-east-1"\ 
-e "REGISTRY_STORAGE_S3_BUCKET=******"\ 
-e "REGISTRY_STORAGE_S3_ACCESSKEY=******"\ 
-e "REGISTRY_STORAGE_S3_SECRETKEY=******"\ 
registry:2 

Notiere die Zugabe des REGISTRY_STORAGE=s3 Umgebungsvariable.

Sie auf diesen Hinweis in der registry docs:

Hinweis: Wenn eine Umgebungsvariable Karte Wert in einen String ändert, wie den Speichertreiber Typ mit REGISTRY_STORAGE = Dateisystem ersetzt, dann werden alle sub- Felder werden gelöscht. Wie bei werden bei der Angabe des Speichertyps in der Umgebung alle Parameter gelöscht, die sich auf die alte Speicherkonfiguration beziehen.

+3

In AWS EC2 können Sie die Zugriffs- und geheimen Schlüssel weglassen, wenn Sie Ihrer EC2-Instanz eine IAM-Rolle zuweisen. –

+1

Guter Tipp, @TedZlatanov! Außerdem - ich sollte jedem, der es liest - sagen, dass Sie einen neuen IAM-Benutzer dafür verwenden können (und sollten). Wenn Sie IAM verwenden, können Sie weiterhin Zugangsschlüssel und geheime Schlüssel verwenden - aber es ist gut zu wissen, dass es Anwendungsfälle gibt, in denen Sie sie weglassen können! –

3

Ich bin den accesskey und SecretKey über Umgebungsvariablen in meinem docker run Befehl geladen. Ich gebe jedoch meinen Bucket-Namen und Bereich in der Konfigurationsdatei an. Bei der Suche nach Lösungen für Ihr Problem scheint es so, dass Sie die Region und den Bucket-Namen in der Konfigurationsdatei angeben müssen. Jedes Mal, wenn ich versuche, diese in Umgebungsvariablen in meinem docker run Befehl anzugeben, erhalte ich Fehler und der Container startet nicht. Ich empfehle, diese Informationen über die Konfigurationsdatei zu laden (und diese Flags in Ihren docker run Befehl fallenzulassen), und Ihren Zugriffsschlüssel und Ihren geheimen Schlüssel über Umgebungsvariablen wie Sie sind anzugeben. Ich habe ein bisschen Zeit damit verbracht, die Quelle nach Informationen zu durchsuchen, warum das nicht so funktioniert, wie wir es für richtig halten, aber nichts wirklich Hilfreiches gefunden hat. Ich denke, es muss etwas sein, das AWS S3 nicht mag, aber ich bin nicht weit gekommen, um das zu erklären, da es für mich in der obigen Konfiguration funktioniert. Viel Glück!

PS: In Bezug auf Ihre IAM Zugang, there are some comments in the source, die Ihnen helfen könnte, eine Vorstellung davon zu geben, was zu erwarten ist.

+1

Nur zur Bestätigung - wenn Sie sagen, den Namen in der Konfigurationsdatei angeben, bedeutet das, ich muss das Bild aus der Docker-Datei erstellen? Eine andere Anmerkung - Ich habe versucht, nur Konfigurationsoptionen zu ändern und die Dockerfile zu bauen. Ich musste nur Region und Bucketname hinzufügen und ließ den Zugriff und den geheimen Schlüssel leer, da ich eine IAM-Rolle mit Zugriff auf den Bucket angehängt habe. Ich nehme an, der Prozess ist immer noch ein bisschen in den frühen Stadien für Reg 2.0, da Sie das Bild nur zur Angabe verschiedener Konfigurationsoptionen erstellen müssen – alexfvolk

+0

Um ehrlich zu sein, würde ich das [Distribution Repo] herunterladen (https: // github. com/docker/distribution) und erstellen Sie Ihr eigenes Registrierungs-Image aus der bereitgestellten Docker-Datei im Stammverzeichnis des Projekts. Dies ist sowieso empfehlenswert. Vor allem aber können Sie dem resultierenden Container, in dem Sie Ihre Datei config.yml ablegen können, ein Volume hinzufügen. Dies ist, was ich getan habe, um die Registrierung laufen zu lassen (seit der Verwendung der Lager-V2-Registry-Image war ein Kopfschmerz für mich aus Konfigurationsgründen). Ich hoffe, ich bin mit diesem Vorschlag nicht zu verwirrend! – L0j1k

+0

Und ja, total, v2 Registrierung ist brand-spanking-neu. Wie Sie wahrscheinlich bereits wissen, ist seine API ziemlich leer gegenüber v1, aber ich hatte schon viel weniger Probleme mit v2 als ich versucht habe, die Registrierung von v1 zu bekommen. – L0j1k

Verwandte Themen