google-compute-engine - google - gcloud docker push
Acceda al registro del contenedor de Google sin el cliente gcloud (6)
Cuando creó su VM, ¿le dio los ámbitos necesarios para poder leer desde el registro?
Las instancias de cálculo de gcloud crean INSTANCE / --scopes https://www.googleapis.com/auth/devstorage.read_write
Si lo hizo, no se requiere más autenticación.
Tengo un host Docker CoreOS en el que quiero comenzar a ejecutar contenedores, pero cuando trato de usar el comando docker para recuperar la imagen del registro privado del contenedor de Google ( https://cloud.google.com/tools/container-registry/ ), Obtengo un 403. Hice algunas búsquedas, pero no estoy seguro de cómo adjuntar la autenticación (o dónde generar el paquete de usuario + pase para usar con el comando de inicio de sesión de Docker).
¿Alguien ha tenido suerte sacando de los contenedores privados de google? No puedo instalar el comando gcloud porque coreos no viene con python, que es un requisito
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
Actualización : después de obtener respuestas de @mattmoor y @Jesse:
La máquina de la que estoy tirando tiene devacceso
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
Además, intenté usar el método de inicio de sesión _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
El esquema de autenticación de Google Container Registry es simplemente usar:
username: ''_token''
password: {oauth access token}
En Google Compute Engine puede iniciar sesión sin gcloud con:
$ 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
Actualización en {asia, eu, us, b} .gcr.io
Para acceder a un repositorio alojado en un repositorio localizado, debe iniciar sesión con el nombre de host apropiado en el comando de
docker login
anterior.
Actualización sobre citas alrededor de _token
A partir de la versión 1.8 de docker, el inicio de sesión de docker requiere que la opción -u esté en qoutes o comience con una letra.
Algunos consejos de diagnóstico ...
Compruebe que tiene el alcance de Cloud Storage a través de:
$ 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
...
NOTA: "docker pull" requiere "read_only", pero "docker push" requiere "read_write".
Para dar acceso a este robot a un cubo en otro proyecto, hay algunos pasos.
Primero, descubra la identidad de la cuenta de servicio VM (también conocido como robot) a través de:
$ curl -H ''Metadata-Flavor: Google'' $SVC_ACCT/email
[email protected]
A continuación, hay tres ACL importantes para actualizar:
1) Bucket ACL (necesario para enumerar objetos, etc.)
PROJECT_ID=correct-answer-42
[email protected]
gsutil acl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
2) ACL predeterminado del depósito (plantilla para el futuro n. ° 3)
gsutil defacl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
3) ACL de objeto (solo se necesita cuando el depósito no está vacío)
gsutil -m acl ch -R -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
Parte de por qué esto aún no está en nuestra documentación oficial es que queremos una mejor historia de alto nivel para ello, pero respetamos las ACL de GCS.
Existe un complemento de autenticación de registro de contenedor de Google oficial publicado. Le invitamos a probarlo y dejar comentarios / informar problemas.
Hay dos formas oficiales :
-
$ 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
Nota: El correo electrónico no se usa, por lo que puede poner lo que quiera en él.
Cambie
gcr.io
a cualquier dominio que se muestre en su
Registro de contenedores de Google
(por ejemplo,
eu.gcr.io
).
La opción (1) solo proporciona un token temporal, por lo que probablemente desee la opción (2).
Para obtener esos
$JSON_KEY
:
- Vaya a Administrador de API> Credenciales
-
Haga clic en "Crear credenciales">
Clave de cuenta de servicio
:
-
Cuenta de servicio: nueva cuenta de servicio
-
Nombre: cualquier cosa que desee, como
Docker Registry (read-only)
- Rol: Almacenamiento (desplazarse hacia abajo)> Visor de objetos de almacenamiento
-
Nombre: cualquier cosa que desee, como
- Tipo de clave: JSON
-
Cuenta de servicio: nueva cuenta de servicio
-
Descargar como
keyfile.json
-
JSON_KEY=$(cat keyfile.json | tr ''/n'' '' '')
- Ahora puedes usarlo.
Una vez que haya iniciado sesión, puede ejecutar
docker pull
.
También puede copiar el
~/.dockercfg
actualizado para preservar la configuración.
He desarrollado un complemento jenkins que permite que un esclavo que se ejecuta en GCE inicie sesión en el registro de google utilizando la solución @ mattmoor. Puede ser útil para otros. :)
Está disponible en https://github.com/Byclosure/gcr.io-login-plugin .
Las respuestas aquí se refieren al acceso a la ventana acoplable desde una instancia de Google Compute Engine.
Si desea trabajar con el Registro de contenedores de Google en una máquina que no está en Google Compute Engine (es decir, local) utilizando la ventana acoplable, puede seguir las instrucciones de Google .
Los dos métodos principales están utilizando un token de acceso o un archivo de clave JSON.
Tenga en cuenta que
_token
y
_json_key
son los valores reales que proporciona para el nombre de usuario (
-u
)
Token de acceso
$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io
JSON Key File
$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io
Para crear un archivo de clave, puede seguir estas instrucciones:
- Abra la página de credenciales.
-
Para configurar una nueva cuenta de servicio, haga lo siguiente:
- Haga clic en Agregar credenciales> Cuenta de servicio.
- Elija si desea descargar la clave pública / privada de la cuenta de servicio como un archivo P12 estándar o como un archivo JSON que puede cargar una biblioteca de cliente API de Google.
- Su nuevo par de claves pública / privada se genera y descarga en su máquina; sirve como la única copia de esta clave. Usted es responsable de almacenarlo de forma segura.
Puede ver la documentación de Google sobre la generación de un archivo de clave aquí .