Je souhaite lancer l'exécution de conteneurs sur un hôte docker CoreOS, mais lorsque j'essaie d'utiliser la commande docker pour extraire l'image du registre privé de conteneur Google ( https://cloud.google.com/tools/container- registry/ ), j’obtiens un 403. J’ai fait quelques recherches, mais je ne sais pas comment joindre l’authentification (ou où générer le paquet user + pass à utiliser avec la commande docker login).
Quelqu'un at-il eu de la chance en tirant des conteneurs privés de Google? Je ne parviens pas à installer la commande gcloud car Coreos n'est pas livré avec python, ce 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
Update: après avoir reçu les réponses de @mattmoor et @Jesse:
La machine dont je tire est 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
De plus, j'ai essayé d'utiliser la méthode de connexion _token
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
Le schéma d'authentification de Google Container Registry consiste à utiliser simplement:
username: '_token'
password: {oauth access token}
Sur Google Compute Engine, vous pouvez vous connecter sans gcloud avec:
$ METADATA=http://metadata.google.internal./computeMetadata/v1
$ SVC_ACCT=$METADATA/instance/service-accounts/default
$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token \
| cut -d'"' -f 4)
$ docker login -e [email protected] -u '_token' -p $ACCESS_TOKEN https://gcr.io
Mise à jour sur {asia, eu, us, b} .gcr.io
Pour accéder à un référentiel hébergé dans un référentiel localisé, vous devez vous connecter au nom d’hôte approprié dans la commande docker login
ci-dessus.
Mise à jour sur les citations autour de _token
À partir de la version 1.8 de docker, la connexion à docker requiert que l'option -u soit dans qoutes ou commence par une lettre.
Quelques conseils de diagnostic ...
Vérifiez que vous avez la portée Cloud Storage via:
$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/scopes
...
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/devstorage.read_only
...
NOTE: "docker pull" nécessite "read_only", mais "docker Push" nécessite "read_write".
Pour permettre à ce robot d'accéder à un compartiment dans un autre projet, plusieurs étapes sont nécessaires.
Tout d’abord, recherchez l’identité du compte de service VM (autrement dit robot) via:
$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/email
[email protected]
Ensuite, trois listes de contrôle d'accès importantes doivent être mises à jour:
1) Bucket ACL (nécessaire pour répertorier les objets, etc.)
PROJECT_ID=correct-answer-42
[email protected]
gsutil acl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
2) Bucket Default ACL (modèle pour la future # 3)
gsutil defacl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
3) ACL d'objets (nécessaire uniquement lorsque le compartiment n'est pas vide)
gsutil -m acl ch -R -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
Une partie de la raison pour laquelle cela ne figure pas encore dans notre documentation officielle est que nous voulons une meilleure histoire de haut niveau, mais nous respectons les ACL de GCS.
Les réponses présentées ici concernent l’accès au menu fixe à partir d’une instance de Google Compute Engine.
Si vous souhaitez utiliser le registre de conteneurs Google sur une machine ne se trouvant pas dans Google Compute Engine (localement) à l'aide de Vanilla docker, vous pouvez suivez les instructions de Google .
Les deux méthodes principales utilisent un jeton d'accès ou un fichier de clé JSON.
Notez que _token
et _json_key
sont les valeurs réelles fournies pour le nom d'utilisateur (-u
)}
Jeton d'accès
$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io
Fichier clé JSON
$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io
Pour créer un fichier de clé, vous pouvez suivre ces instructions:
Vous pouvez consulter la documentation de Google sur la génération d'un fichier de clé ici .
Lorsque vous avez créé votre VM, lui avez-vous donné les étendues nécessaires pour pouvoir lire dans le registre?
les instances de calcul gcloud créent INSTANCE\ --scopes https://www.googleapis.com/auth/devstorage.read_write
Si vous l'avez fait, aucune autre authentification n'est requise.
Il existe un fichier officiel Google Container Registry Auth Plugin publié. Vous pouvez l’essayer et laisser des commentaires/signaler des problèmes.