Ich habe einen CoreOS-Docker-Host, auf dem ich Container ausführen möchte, aber beim Versuch, den Docker-Befehl zum Abrufen des Bildes aus der privaten Registry des Google-Container zu verwenden ( https://cloud.google.com/tools/container- registry/ ), ich bekomme eine 403. Ich habe etwas gesucht, aber ich bin mir nicht sicher, wie ich die Authentifizierung anfügen soll (oder wo man das Benutzer + Pass-Paket für den Docker-Login-Befehl generiert).
Hat jemand Glück, sich aus den privaten Google-Containern zu ziehen? Ich kann den Befehl gcloud nicht installieren, da Coreos nicht mit Python geliefert wird. Dies ist eine Voraussetzung
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: Nachdem Sie Antworten von @mattmoor und @Jesse erhalten haben:
Die Maschine, von der ich abziehe, hat einen 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
Außerdem habe ich versucht, die Anmeldemethode _token zu verwenden
[email protected]:/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
[email protected]:/home/andre$ echo $ACCESS_TOKEN
**************(redacted, but looks valid)
[email protected]:/home/andre$ docker login -e [email protected] -u _token -p $ACCESS_TOKEN http://gcr.io
Login Succeeded
[email protected]:/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
Das Authentifizierungsschema der Google Container-Registrierung ist einfach zu verwenden:
username: '_token'
password: {oauth access token}
Auf der Google Compute Engine können Sie sich mit ohne gcloud anmelden:
$ 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
Update auf {asia, eu, us, b} .gcr.io
Um auf ein Repository zuzugreifen, das in einem lokalisierten Repository gehostet wird, müssen Sie sich beim obigen docker login
-Befehl beim entsprechenden Hostnamen anmelden.
Update auf Anführungszeichen um _token
Ab der Docker-Version 1.8 muss für die Docker-Anmeldung die Option -u in qoutes stehen oder mit einem Buchstaben beginnen.
Einige Diagnosetipps ...
Überprüfen Sie, ob Sie über den Cloud-Speicherbereich verfügen:
$ 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
...
HINWEIS: "Docker Pull" erfordert "read_only", aber "Docker Push" erfordert "Read_write".
Um diesem Roboter Zugriff auf einen Bucket in einem anderen Projekt zu gewähren, gibt es einige Schritte.
Ermitteln Sie zunächst die Identität des VM - Dienstkontos (auch bekannt als Roboter):
$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/email
[email protected]
Als Nächstes müssen drei wichtige ACLs aktualisiert werden:
1) Bucket-ACL (zum Auflisten von Objekten usw. erforderlich)
PROJECT_ID=correct-answer-42
[email protected]
gsutil acl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
2) Bucket Default ACL (Vorlage für zukünftige Nummer 3)
gsutil defacl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
3) Objekt-ACLs (nur erforderlich, wenn der Bucket nicht leer ist)
gsutil -m acl ch -R -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
Ein Grund, warum dies in unserer offiziellen Dokumentation noch nicht enthalten ist, ist, dass wir eine bessere Story auf hoher Ebene wünschen, aber wir respektieren die GCS-ACLs.
Die Antworten beziehen sich auf den Zugriff auf das Docker aus einer Google Compute Engine-Instanz.
Wenn Sie mit der Google Container Registry auf einem Computer arbeiten möchten, der nicht in der Google Compute Engine (d. H. Lokal) mit Vanilla Docker arbeitet, können Sie den Anweisungen von Google folgen .
Die zwei Hauptmethoden verwenden ein Zugriffstoken oder eine JSON-Schlüsseldatei.
Beachten Sie, dass _token
und _json_key
die tatsächlichen Werte sind, die Sie für den Benutzernamen angeben (-u
).
Zugangstoken
$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io
JSON-Schlüsseldatei
$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io
Um eine Schlüsseldatei zu erstellen, folgen Sie diesen Anweisungen:
Sie können die Dokumentation von Google zum Erstellen einer Schlüsseldatei hier anzeigen.
Es gibt zwei offizielle Wege :
$ 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
Hinweis: Die E-Mail wird nicht verwendet, sodass Sie alles darin ablegen können, was Sie möchten.
Ändern Sie gcr.io
In die Domain, die in Ihrer Google Container Registry (z. B. eu.gcr.io
) Angezeigt wird.
Option (1) gibt nur ein temporäres Token aus, daher möchten Sie wahrscheinlich Option (2). So erhalten Sie $JSON_KEY
:
Docker Registry (read-only)
keyfile.json
JSON_KEY=$(cat keyfile.json | tr '\n' ' ')
Sobald Sie eingeloggt sind, können Sie einfach docker pull
Ausführen. Sie können auch den aktualisierten ~/.dockercfg
Kopieren, um die Einstellungen beizubehalten.
Haben Sie bei der Erstellung Ihres VM die erforderlichen Bereiche angegeben, um aus der Registrierung lesen zu können?
gcloud-Berechnungsinstanzen erstellen INSTANCE\ --scopes https://www.googleapis.com/auth/devstorage.read_write
Wenn Sie dies tun, ist keine weitere Authentifizierung erforderlich.
Es ist ein offizielles Google Container Registry Auth Plugin veröffentlicht. Sie können es gerne ausprobieren und Feedback hinterlassen/Probleme melden.