Accéder à google conteneur de registre sans le gcloud client
J'ai un CoreOS docker hôte que je veux commencer l'exécution des conteneurs sur, mais lorsque j'essaie d'utiliser le panneau de commande pour récupérer l'image de google conteneur privé de registre (https://cloud.google.com/tools/container-registry/), j'ai un 403. J'ai fait quelques recherches, mais je ne suis pas sûr de la façon de joindre l'authentification (ou pour générer de l'utilisateur+pass bundle à utiliser avec le panneau de connexion de commande).
Personne n'a eu de chance en tirant à partir de google récipients privés? Je ne peux pas installer le gcloud commande à cause de coreos ne vient pas avec python, qui est une exigence
docker run -p 80:80 gcr.io/prj_name/image_name
Unable to find image 'gcr.io/prj_name/image_name:latest' locally
Pulling repository gcr.io/prj_name/image_name
FATA[0000] HTTP code: 403
Mise à jour: après l'obtention de réponses de @mattmoor et @Jesse:
La machine que je suis en tirant à partir de n'avoir devaccess
curl -H 'Metadata-Flavor: Google' http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/scopes
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/datastore
----> https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.admin
https://www.googleapis.com/auth/sqlservice.admin
https://www.googleapis.com/auth/taskqueue
https://www.googleapis.com/auth/userinfo.email
En outre, j'ai essayé d'utiliser le _token de la méthode d'identification
jenkins@riskjenkins:/home/andre$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' 'http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/token' | cut -d'"' -f 4)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 142 100 142 0 0 14686 0 --:--:-- --:--:-- --:--:-- 15777
jenkins@riskjenkins:/home/andre$ echo $ACCESS_TOKEN
**************(redacted, but looks valid)
jenkins@riskjenkins:/home/andre$ docker login -e [email protected] -u _token -p $ACCESS_TOKEN http://gcr.io
Login Succeeded
jenkins@riskjenkins:/home/andre$ docker run gcr.io/prj_name/image_name
Unable to find image 'gcr.io/prj_name/image_name:latest' locally
Pulling repository gcr.io/prj_name/image_name
FATA[0000] HTTP code: 403
Vous devez vous connecter pour publier un commentaire.
Google Conteneur de Registre schéma d'authentification est d'utiliser simplement:
Sur Google Compute Engine, vous pouvez vous connecter sans gcloud avec:
Mise à jour sur {asie,ue,us,b}.rme.io
Pour accéder à un référentiel hébergé localisé dans un référentiel, vous devez vous connecter à la appropriée de nom d'hôte dans le ci-dessus
docker login
commande.Mise à jour sur des guillemets autour de _token
De docker version 1.8, le panneau de connexion nécessite l'option-u pour être en qoutes ou commencer par une lettre.
Quelques conseils de diagnostics...
Vérifiez que vous avez le Stockage dans le Cloud portée par:
REMARQUE: "docker pull" exige "la valeur read-only", mais "docker" push " exige "read_write".
De donner à ce robot accès à un seau dans un autre projet, il y a quelques étapes.
Tout d'abord, trouver la VM compte de service (aka robot) à l'identité par le biais de:
Ensuite, il y a trois listes de contrôle d'accès de mise à jour:
1) Seau ACL (nécessaire pour les objets de la liste, etc)
2) Seau ACL par Défaut (modèle pour les futurs #3)
3) Objet Acl (nécessaire uniquement lorsque le seau est non-vide)
Partie de pourquoi ce n'est pas dans notre documentation officielle encore, c'est que nous voulons un meilleur haut niveau de l'histoire, mais tl;dr nous respectons GCS Acl.
Les réponses ici face à l'accès au panneau de l'intérieur de Google Compute Engine instance.
Si vous souhaitez travailler avec Google Conteneur de la base de Registre sur une machine pas dans le Google Compute Engine (locale) à l'aide de la vanille menu fixe, vous pouvez suivez les instructions de Google.
Les deux principales méthodes sont à l'aide d'un jeton d'accès ou un JSON fichier de clé.
Noter que
_token
et_json_key
sont les valeurs réelles de vous fournir le nom d'utilisateur (-u
)Jeton D'Accès
JSON Fichier de Clé
Pour créer un fichier de clé, vous pouvez suivre ces instructions:
Vous pouvez vue de Google, documentation sur la génération d'un fichier de clé ici.
Il y a deux façons:
$ docker login -e [email protected] -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://gcr.io
$ docker login -e [email protected] -u _json_key -p "$JSON_KEY" https://gcr.io
Remarque: L'e-mail n'est pas utilisé, de sorte que vous pouvez mettre ce que vous voulez dedans.
Changement
gcr.io
pour quel que soit votre domaine est indiqué dans votre Google Conteneur De Registre (par exempleeu.gcr.io
).De l'Option (1) ne donne un jeton temporaire, de sorte que vous voudrez probablement l'option (2). Pour obtenir cette
$JSON_KEY
:Docker Registry (read-only)
keyfile.json
JSON_KEY=$(cat keyfile.json | tr '\n' ' ')
Une fois enregistré, vous pouvez simplement exécuter
docker pull
. Vous pouvez également copier la mise à jour~/.dockercfg
pour conserver les paramètres.unknown shorthand flag: 'e' in -e See 'docker login --help'.
Lorsque vous avez créé votre VM avez-vous de lui donner le nécessaire étendues afin d'être en mesure de lire à partir de la base de registre?
Si vous n'avez donc aucune authentification n'est requise.
Il y a un officiel Google Conteneur De Registre Plugin Auth publié. Vous êtes invités à l'essayer et de laisser un commentaire/signaler des problèmes.
J'ai développé un plugin jenkins qui permet à un esclave en cours d'exécution sur la CME de connexion de google de registre à l'aide de @mattmoor de la solution. Il pourrait être utile à d'autres. 🙂
Il est disponible à l' https://github.com/Byclosure/gcr.io-login-plugin.