2014-07-17 18 views
8

Sto cercando di estrarre immagini docker da un repository privato ospitato nell'hub Docker https://registry.hub.docker.com/u/myname/myapp in questo modo utilizzando l'API remota docker. Il doc non è chiaro su come specificare le credenziali di autenticazione in una richiesta POST come questoDock esterno api pull da registro privato hub Docker

curl -XPOST -H "X-Registy-Auth: base64_encoded_authconfig_object" "http://localhost:4243/images/create?fromImage=myname/myapp" 

This, inoltre, non elaborare su come esattamente viene generato l'authconfig.

This parla l'invio in una base di 64 JSON codificato con una struttura come questa:

{ 
    "index_url": { 
    "username": "string", 
    "password": "string", 
    "email": "string", 
    "serveraddress": "string" 
    } 
} 

Ma pretende molto spiegare che cosa è index_url e serveraddress. Sono

index_url = https://registry.hub.docker.com/u/myname/myapp 
serveraddress = https://registry.hub.docker.com 

Le configurazioni di cui sopra mi danno 404, probabilmente il fulcro del Registro di pronti contro termine privata non viene riconosciuta.

Ho anche provato base 64 codifica il contenuto del mio ~/.dockercfg

{ 
    "https://index.docker.io/v1/": { 
    "auth":"xxxxxxxxxxxxxxxxxxx==", 
    "email":"[email protected]" 
    } 
} 

Potrebbe dirmi come generare i Base64 codificati oggetto authconfig e ottenere il comando precedente ricciolo di lavoro.

Grazie in anticipo

Docker versione

Client version: 0.11.1 
Client API version: 1.11 
Go version (client): go1.2.1 
Git commit (client): fb99f99 
Server version: 0.11.1 
Server API version: 1.11 
Git commit (server): fb99f99 
Go version (server): go1.2.1 
+0

Hi @alpha_cod, lo si tira immagini dal registro privato con successo utilizzando finestra mobile a distanza API? – lephix

risposta

9

ho avuto lo stesso problema.

Ecco il "grezzo" AuthConfig oggetto che si dovrebbe usare per passare le credenziali:

 
{ 
    "username":"your_registry_username_or_email", 
    "password":"*****", 
    "auth":"", // leave empty 
    "email":"[email protected]" 
} 

È quindi necessario "codificare" utilizzando Base64.

Non hai detto che lingua si sta utilizzando, ma se necessario, this awesome site vi permetterà di codificare l'oggetto in uno scatto. Oppure, da una shell:

echo '{"username":"username","password":"*****", "auth":"","email":"[email protected]"}' | base64 


Poi, passare il valore codificato all'intestazione:

X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ== 

Ecco un esempio di lavoro utilizzando curl e

  • un registro di sistema disponibile presso r.getitlive.io
  • un demone finestra mobile ascolto a '192.168.60.10: 8888' :
 
curl -X POST -d "" \ 
    -H "X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ==" \ 
    'http://192.168.60.11:8888/images/create?fromImage=r.getitlive.io/cool/repo&tag=latest' 

Nota: non riuscivo a farlo funzionare (ancora) mettendo il Registro di sistema endpoint/URL remoto nel serveraddress campo dell'oggetto AuthConfig. Ecco perché sto aggiungendo l'host del registro al parametro fromImage=.

+0

Grazie per il vostro aiuto. Ho provato il comando di ricciolo di cui sopra. Dice invalido dal valore Image (nome spazio dei nomi non valido (u), sono consentiti solo [a-z0-9_], dimensione compresa tra 4 e 30) quando ho usato https://registry.hub.docker.com/u/myname/myapp o registry.hub.docker.com/myname/myapp. Dall'immagine non sembra accettare alcun URL ma qualcosa del formato myname/myapp, nel qual caso dice 404 come questo repository non è pubblico –

+0

Mmm ... Prova a rimuovere completamente 'registry.hub.docker.com' dato che è il predefinito. Usa invece '? FromImage = myname/myapp'. – mbarthelemy

+0

Ciò fornisce un 404, poiché la menzione implicita del registro Dockerhub non viene riconosciuta –

Problemi correlati