google google-compute-engine gcloud google-container-registry

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.



Hay dos formas oficiales :

  1. $ docker login -e [email protected] -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://gcr.io
  2. $ 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 :

  1. Vaya a Administrador de API> Credenciales
  2. 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
    • Tipo de clave: JSON
  3. Descargar como keyfile.json
  4. JSON_KEY=$(cat keyfile.json | tr ''/n'' '' '')
  5. 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:

  1. Abra la página de credenciales.
  2. 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í .