11

Utilizzo la funzione di trasporto per inviare immagini del docker private al registro dei contenitori di Google che poi desidero estrarre localmente su un laptop o all'interno di un'istanza su Google Calcola il motore.Estrarre le immagini private del docker dal registro dei contenitori di Google senza gcloud

So che il comando gcloud preview docker pull gcr.io/projectID/image-name funziona, ma non posso fare affidamento sul fatto che gcloud sia installato su ogni macchina di cui qualcuno potrebbe aver bisogno per estrarre l'immagine.

Se corro docker-compose up -d sulla mia macchina, allora ottengo il seguente errore:

Pulling image gcr.io/projectID/image-name... 
Pulling repository gcr.io/projectID/image-name 
Traceback (most recent call last): 
    File "<string>", line 3, in <module> 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 31, in main 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 27, in dispatch 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 24, in dispatch 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 59, in perform_command 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 464, in up 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.project", line 208, in up 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.service", line 214, in recreate_containers 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.service", line 199, in create_container 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.progress_stream", line 37, in stream_output 
    File "/compose/build/docker-compose/out00-PYZ.pyz/compose.progress_stream", line 50, in print_output_event 
compose.progress_stream.StreamOutputError: Error: Status 403 trying to pull repository projectID/image-name: "Access denied." 

esiste un modo per autenticare o accedere l'immagine con una qualche forma di OAuth o le chiavi? Voglio evitare di dover installare gcloud su ogni macchina che avrà mai bisogno di tirare l'immagine, e le immagini devono rimanere private.

Ho provato gcloud preview docker -a ma questa non è la soluzione che sto cercando.

Grazie in anticipo per qualsiasi aiuto.

+0

Avete provato questo: http://stackoverflow.com/questions/29291576/access-google-container-registry-without-the-gcloud-client – mattmoor

+0

Sì, e la soluzione funziona su GCE (Grazie!) , tuttavia non posso applicarlo quando è in esecuzione su una macchina locale.C'è anche il problema che devo autenticare manualmente su ogni istanza GCE che viene creata, che non è scalabile. – Maverick

+0

Localmente, è possibile utilizzare ancora "accesso docker", ma sostituire "gcloud auth print-access-token" per l'arricciatura (o docker gcloud -a). – mattmoor

risposta

11

Se si desidera lavorare con il registro dei contenitori di Google su un computer non presente in Google Compute Engine (ovvero locale) utilizzando la finestra mobile di vaniglia è possibile eseguire follow Google's instructions.

I due metodi principali utilizzano un token di accesso o un file di chiave JSON.

noti che _token e _json_key sono i valori effettivi forniti per il nome utente (-u)

token di accesso

$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io 

JSON file chiave

$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io 

Per creare un file chiave è possibile seguire queste istruzioni:

  1. Aprire la pagina delle credenziali.
  2. Per configurare un nuovo account di servizio, effettuare le seguenti operazioni:
    • Fare clic su Aggiungi credenziali> account servizio.
    • Scegliere se scaricare la chiave pubblica/privata dell'account di servizio come file P12 standard o come file JSON che può essere caricato da una libreria client dell'API di Google.
    • La nuova coppia di chiavi pubblica/privata viene generata e scaricata sul dispositivo; serve come unica copia di questa chiave. Sei responsabile per la memorizzazione in modo sicuro.

È possibile view Google's documentation on generating a key file here.

+0

Does '_json_key' proviene da file json? Qualche idea su quale campo corrisponde? –

+0

'_json_key' è un valore letterale. Sta segnalando a GCR cosa aspettarsi dal flag '-p'. – anthonator