usar services hub fargate elastic ecs ecr container aws amazon-web-services docker aws-ecr

amazon web services - services - No se puede enviar la imagen a Amazon ECR; falla con "sin credenciales de autenticación básicas"



install docker amazon linux 2 (30)

Estoy tratando de insertar una imagen acoplable en un registro de Amazon ECR. Estoy usando Docker Client Docker versión 1.9.1, compilación a34a1d5. Utilizo "aws ecr get-login --region us-east-1" para obtener los créditos de inicio de sesión del acoplador. Luego inicio sesión con éxito con esos créditos de la siguiente manera:

docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com WARNING: login credentials saved in /Users/ar/.docker/config.json Login Succeeded

Pero cuando trato de empujar mi imagen me sale el siguiente error:

$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1) bcff5e7e3c7c: Preparing Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials

Me aseguré de que el usuario aws tuviera los permisos correctos. También me aseguré de que el repositorio permitiera a ese usuario presionarlo. Solo para asegurarme de que no era un problema, configuré el registro para permitir que todos los usuarios tengan acceso completo. Nada cambia el error "sin credenciales de autenticación básicas". No sé cómo comenzar a depurar esto ya que todo el tráfico está encriptado.

ACTUALIZAR

Así que tuve un momento de Homer Simpson D''Oh cuando me di cuenta de la causa raíz de mi problema. Tengo acceso a varias cuentas de AWS. Aunque estaba usando aws configure para establecer mis credenciales para la cuenta donde había configurado mi repositorio, aws cli estaba usando las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY. Entonces, cuando hice aws ecr get-login, estaba devolviendo un inicio de sesión para la cuenta incorrecta. No noté que los números de cuenta eran diferentes hasta que volví ahora para probar algunas de las respuestas propuestas. Cuando elimino las variables de entorno, todo funciona correctamente. Supongo que el lema de la historia es que si encuentras este error, asegúrate de que el repositorio en el que estás iniciando sesión coincida con la etiqueta que has aplicado a la imagen.


  1. Asegúrese de haber creado primero el registro ECR.
    Luego, según las instrucciones de comando de inserción de ECR, corte y pegue los siguientes comandos
  2. Ejecute el comando de inicio de sesión de Docker (eval en Mac / Linux omite cortar y pegar)
    eval $(aws ecr get-login --region us-east-1)
    agregue --perfil si usa varias cuentas de AWS
    eval $(aws ecr get-login --region us-east-1 --profile your-profile)
  3. docker build -t image-name .
  4. docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
  5. docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest

¡En caso de error, asegúrese de ejecutar todos los comandos nuevamente! Las credenciales que obtiene usando aws ecr get-login son temporales y caducarán.


Agrego la opción de región y todo funciona bien para mí:

aws ecr get-login --no-include-email --region eu-west-3


Asegúrese de utilizar la región correcta en aws ecr get-login , debe coincidir con la región en la que se crea su repositorio.



Después de ejecutar este comando:

(aws ecr get-login --no-include-email --region us-west-2)

simplemente ejecute el comando de inicio de sesión de Docker desde la salida

docker login -u AWS -p epJ....

es la forma en que Docker inicia sesión en ECR


El comando docker dado por aws-cli está un poco apagado ...

Al usar el inicio de sesión de Docker, Docker guardará un servidor: par de claves en su llavero o en el archivo ~ / .docker / config.json

Si guarda la clave en https://7272727.dkr.ecr.us-east-1.amazonaws.com la búsqueda de la clave durante la inserción fallará porque Docker buscará un servidor llamado 7272727.dkr.ecr.us-east-1.amazonaws.com no https://7272727.dkr.ecr.us-east-1.amazonaws.com .

Use el siguiente comando para iniciar sesión:

eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed ''s|https://||'')

Una vez que ejecute el comando, recibirá ''Login Succeeded'' mensaje ''Login Succeeded'' y luego estará bien
después de eso tu comando push debería funcionar


En Windows en PowerShell , use:

Invoke-Expression $(aws ecr get-login --no-include-email)


En mi caso (y probablemente en todos los casos), este error resultó de tener varias cuentas de AWS. Entonces, AWS ECR no está utilizando las credenciales aws correctas asociadas con la cuenta aws.

Intenté varias soluciones mencionadas aquí, pero no tuve éxito. Funcionó después de usar tokens en lugar de nombre de usuario y contraseña . Lo tengo funcionando siguiendo las instrucciones aquí. https://btburnett.com/2017/01/docker-login-for-amazon-aws-ecr-using-windows-powershell.html


En mi caso, después de ejecutar aws ecr get-login --no-include-email --region ***** , acabo de copiar la salida de ese comando con el formato docker login -u *** -p ************ , y lo pega en la solicitud. El empuje siguió adelante.


En mi caso, esto fue un error con Docker para Windows y su soporte para Windows Credential Manager.

Abra su ~/.docker/config.json y elimine la entrada "credsStore": "wincred" .

Esto hará que las credenciales se config.json directamente en config.json . Tendrás que iniciar sesión nuevamente después.

Puede rastrear este error a través de los tickets #22910 y #24968 en GitHub.


Ese mensaje de error proviene de Docker y no necesariamente está relacionado con AWS, ya que recibí el mismo error cuando no uso AWS ... solo dice que Docker no está obteniendo autorización para proceder de cualquier fuente de autenticación que esté usando

En mi caso, en la prueba eliminé el directorio ~ / .docker y obtuve ese error ... después de que reboté mi registro local de acopladores, entonces el empuje de acopladores estaba bien


Esto debería haber funcionado incluso sin abrir los permisos. Consulte la documentación: Autenticación de registro privado .

[Editar: en realidad, tuve problemas de permisos también al hacer una segunda prueba. Vea Docker push to AWS ECR repo privado que falla con JSON mal formado ).]

Sin embargo tuve el mismo problema; No sé por qué, pero utilicé con éxito el mecanismo de autenticación más largo que se describe en los documentos para get-authorization-token

AWS CLI y versiones de Docker:

$ aws --version aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17 $ docker --version Docker version 1.9.1, build a34a1d5

Obtenga el token de autenticación (''contraseña del acoplador'').

aws ecr get-authorization-token --region us-east-1 --output text / --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2

Nota: Mi ~ / .aws / config especifica una región predeterminada diferente, por lo que necesitaba establecer explícitamente --region us-east-1 .

Inicie sesión de forma interactiva (cambie ############ a su ID de cuenta de AWS):

docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/ password: <paste the very long password from above> email: <I left this blank>

Empuje una imagen (suponiendo que haya realizado una test imagen acoplable):

docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1) d5122f58a2e1: Pushed 7bddbca3b908: Pushed latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378


Experimenté el mismo problema.

La generación de nuevas credenciales de AWS (claves de acceso) y la reconfiguración de AWS CLI con nuevas credenciales resolvieron el problema.

Anteriormente, aws ecr get-login --region us-east-1 generó el comando de inicio de aws ecr get-login --region us-east-1 con una URL de registro EC no válida.


FWIW, Debian 9, Docker versión 18.06.1-ce, compilación e68fc7a:

$(aws ecr get-login | sed ''s| -e none | |g'')


Hay un error conocido en el administrador de credenciales wincred en Windows. Eliminar ''https: //'' del comando de inicio de sesión generado resuelve esto.

docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com

en vez de

docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

Consulte también docs.aws.amazon.com/AmazonECR/latest/userguide/… .


Los documentos de AWS le indican que ejecute el siguiente comando (para la región ap-sureste-2)

aws ecr get-login --region ap-southeast-2

Cuando me topé con este problema, no estaba claro para mí en base a esos documentos que necesita ingresar el resultado de este comando en la terminal y ejecutarlo.

La solución que funcionó para mí fue copiar el resultado al portapapeles con

aws ecr get-login --region ap-southeast-2 | pbcopy

Pegue el resultado en la línea de comando y ejecútelo


Me encontré con este problema también corriendo en OSX. Vi la respuesta de Oliver Salzburg y verifiqué mi ~ / .docker / config.json. Tenía múltiples credenciales de autorización en su interior de las diferentes cuentas de AWS que tengo. Eliminé el archivo y después de ejecutar get-login nuevamente funcionó.


Me enfrenté al mismo problema y el error que cometí fue usar la ruta de repositorio incorrecta

por ejemplo: docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest

En el camino anterior, aquí es donde cometí el error: en "dkr.ecr.us-east-1.amazonaws.com" lugar de "west" . Estaba usando " east" . Una vez que corregí mi error, pude empujar la imagen con éxito.


Mi problema era tener múltiples credenciales de AWS; default y dev. Como estaba tratando de implementar para dev esto funcionó:

$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed ''s|https://||'')


Probar con:

eval $(aws ecr get-login --no-include-email | sed ''s|https://||'')

Antes de empujar.


Si ayuda a alguien ...

Mi problema fue que tuve que usar la opción --profile para autenticarme con el perfil adecuado del archivo de credenciales.

A continuación, había omitido el --region [region_name] , que también daba el error "sin credenciales de autenticación básicas".

La solución para mí fue cambiar mi comando de esto:

aws ecr get-login

A esto:

aws --profile [profile_name] ecr get-login --region [region_name]

Ejemplo:

aws --profile foo ecr get-login --region us-east-1

Espero que ayude a alguien!


Si está aislando cuentas de AWS para fines de CI / CD y tiene un repositorio ECR compartido entre varias cuentas de AWS, es posible que deba cambiar el ~/.docker/config.json manualmente.

Digamos que tiene estas configuraciones:

  1. ECR es propiedad de la identificación de cuenta de AWS 00000000000000
  2. El servidor de CI es propiedad de la cuenta de AWS ID 99999999999999

Si llama aws ecr get-login --region us-west-2 | bash aws ecr get-login --region us-west-2 | bash dentro de su servidor CI, docker generará credenciales temporales en ~/.docker/config.json .

{ "auths": { "https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": { "auth": "long-token.." } } }

Pero desea señalar la cuenta de ECR, por lo que debe cambiar el nombre de host.

{ "auths": { "https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": { "auth": "long-token.." } } }

Tenga en cuenta que esta situación depende de cómo se forma la política / usuario de IAM para permitir el acceso a ECR.


Si usa perfiles, no olvide pasar --profile=XXX a aws ecr get-login .


Si usa varios perfiles y necesita iniciar sesión en un perfil que no es el predeterminado, debe iniciar sesión con este comando:

$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)


Simplemente ejecute lo que se devuelva en el paso uno para solucionar el problema.


También nos encontramos con este problema hoy y probamos todo lo mencionado en esta publicación (excepto generar credenciales de AWS).

Finalmente resolvimos el problema simplemente actualizando Docker, luego el empuje funcionó.

El problema se encontró con Docker 1.10.x y se resolvió con Docker 1.11.x.

Espero que esto ayude


También tuve este problema. Lo que sucedió conmigo fue que olvidé ejecutar el comando que me devolvieron después de ejecutar

aws ecr get-login --region ap-southeast-2

¡Este comando devolvió un gran blob, que incluye el comando de docker login allí mismo! No me di cuenta Debería devolver algo como esto:

docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>

Copie y pegue este comando y luego ejecute su comando push docker que se parece a esto:

docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename


Tuve este problema con una causa diferente: necesitaba ingresar a un registro no asociado con mi cuenta de AWS (el registro ECR de un cliente). El cliente me había otorgado acceso en la pestaña Permisos para el registro, agregando mi ID de IAM (por ejemplo, arn:aws:iam::{AWS ACCT #}:user/{Username} ) como Principal. Traté de iniciar sesión con los pasos habituales:

$(aws ecr get-login --region us-west-2 --profile profilename) docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest

Lo que, por supuesto, no resultó en no basic auth credentials . Resulta que aws ecr get-login conecta a la ECR para el registro asociado a su inicio de sesión , lo que tiene sentido en retrospectiva. La solución es decirle a aws ecr get-login qué registro (s) desea iniciar sesión.

$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})

Después de eso, docker push funciona bien.


si ejecuta $(aws ecr get-login --region us-east-1) todo se hará por usted


aws ecr get-login --region us-west-1 --no-include-email

Este comando me da el comando correcto para iniciar sesión. Si no utiliza "--no-include-email", arrojará otro error. El resultado del comando anterior se parece a este inicio de sesión de la ventana acoplable -u AWS -p ********************** muy grande ******. Copia eso y ejecútalo. Ahora mostrará "Inicio de sesión correcto". Ahora puede empujar su imagen a ECR.

Asegúrese de que su regla AMI tenga permiso para el usuario que intentó iniciar sesión.