2015-05-11 23 views
9

Qualcuno ha provato a utilizzare le variabili di ambiente per sovrascrivere le opzioni di configurazione nel registro, ad esempio se è necessario utilizzare il bucket s3 come memoria, ad esempio. Ho letto il documento e si dice (https://docs.docker.com/registry/configuration/):Registro Docker: opzioni di configurazione sovrascrivibili 2.0

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 

Così ho provato questo comando, ma non sembra avere alcun effetto quando avvio il Registro di sistema:

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 

Nei registri I vedere l'output normale, come se non ci vuole le variabili env in considerazione e provare a connettersi a S3:

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: Se uso un ruolo IAM con la mia EC2, sembra ridondante a passare quanto riguarda l'accesso e chiave segreta nel contenitore del registro docker, la finestra mobile può ancora utilizzare il ruolo IAM, qualcuno l'ha provato?

Edit: Dopo corro container e il comando exec per vedere l'uscita di ENV:

[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

Puoi per favore 'docker exec -it myContainer/bin/bash' (o qualunque sia il nome del tuo contenitore) e scaricare il contenuto di' env' qui? Sono in grado di iniettare credenziali AWS S3 tramite variabili di ambiente. – L0j1k

+0

Vedere OP in "Modifica" (ultima sezione) – alexfvolk

risposta

14

il comando completo che funziona per me da un comando docker run è:

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 

nota l'aggiunta della variabile di REGISTRY_STORAGE=s3 ambiente.

preannunciare questo nel registry docs:

Nota: Se una variabile ambiente cambia un valore della mappa in una stringa, come la sostituzione del tipo di driver di archiviazione con REGISTRY_STORAGE = file system, allora tutti sotto- i campi saranno cancellati. Come tali, specificando il tipo di archiviazione nell'ambiente verranno rimossi tutti i parametri correlati alla vecchia configurazione di archiviazione.

+3

In AWS EC2, è possibile omettere l'accesso e le chiavi segrete se si assegna all'istanza EC2 un ruolo IAM. –

+1

Buon consiglio, @TedZlatanov! Inoltre - dovrei dirlo a chiunque stia leggendo - puoi (e dovresti) usare un nuovo utente IAM per questo. Se utilizzi IAM puoi comunque utilizzare i tasti di accesso e le chiavi segrete, ma è bene sapere che esistono casi d'uso in cui puoi ometterli! –

3

sto caricando l'Accessibilità e secretkey tramite variabili d'ambiente nel mio comando docker run. Tuttavia, sto specificando il nome del bucket e la regione nel file di configurazione e, nel processo di ricerca di soluzioni per il tuo problema, sembra che devi specificare la regione e il nome del bucket nel file di configurazione. Ogni volta che provo a specificare queste variabili di ambiente nel mio comando docker run, ottengo errori e il contenitore non si avvia. Suggerisco di caricare queste informazioni tramite il file di configurazione (e di eliminare tali flag nel comando docker run) e di specificare la chiave di accesso e la chiave segreta tramite variabili di ambiente come te. Ho passato un po 'di tempo a scavare nella fonte per avere informazioni sul perché questo non funziona nel modo in cui pensiamo che dovrebbe, ma non ho trovato nulla di veramente utile. Penso che debba essere qualcosa che AWS S3 non apprezza, ma non ho fatto molto per cercare di far luce su questo dato che funziona per me nella configurazione di cui sopra. In bocca al lupo!

PS: per quanto riguarda l'accesso IAM, there are some comments in the source che potrebbe aiutarti a darti un'idea di cosa aspettarti.

+1

Solo per confermare - quando si specifica il nome nel file di configurazione, ciò significa che devo creare l'immagine dal file docker? In un'altra nota, ho provato a cambiare le opzioni di configurazione e creare il file di dock. Ho solo bisogno di aggiungere region e bucketname e lasciato vuoto l'accesso e la chiave segreta in bianco perché ho allegato un ruolo IAM con accesso al bucket. Sto indovinando che il processo è ancora un po 'nelle prime fasi per reg 2.0 dal momento che devi costruire l'immagine solo per specificare diverse opzioni di configurazione – alexfvolk

+0

Per essere onesti, vorrei scaricare il [distribuzione repo] (https: // github. com/docker/distribution) e crea la tua immagine di registro dal Dockerfile fornito nella root del progetto. Questo è ciò che è raccomandato comunque. Ma soprattutto, ti consente di aggiungere un volume al contenitore risultante in cui puoi posizionare il tuo file config.yml. Questo è quello che ho fatto per fare in modo che il registro sia in esecuzione (dal momento che usare l'immagine del registro v2 originale era un problema per me per motivi di configurazione). Spero di non essere stato troppo confuso con questo suggerimento! – L0j1k

+0

E sì, totalmente, il registro v2 è nuovo di zecca. Come probabilmente già sapete, la sua API è piuttosto nuda contro la v1, ma ho già avuto meno problemi con la v2 di quanto non abbia provato a far funzionare il registro v1. – L0j1k

Problemi correlati