Estoy tratando de enviar una imagen acoplable a un registro de Amazon ECR. Estoy usando el cliente docker Docker versión 1.9.1, build a34a1d5 . Uso aws ecr get-login --region us-east-1 para obtener las credenciales de inicio de sesión de Docker. Luego inicio sesión con éxito con esas credenciales 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 SucceededPero cuando trato de empujar mi imagen, aparece 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 de AWS tuviera los permisos correctos. También me aseguré de que el repositorio permitiera que el usuario lo enviara. Solo para asegurarme de que eso no fuera un problema, configuré el registro para permitir el acceso completo a todos los usuarios. Nada cambia el error "no basic auth credentials" . No sé cómo comenzar a depurar esto ya que todo el tráfico está encriptado.
ACTUALIZAR
Así que tuve un poco del momento 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 configuré mi repositorio, aws cli en realidad estaba usando las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY . Entonces, cuando hice aws ecr get-login , devolvía un inicio de sesión para la cuenta incorrecta. No me di cuenta de 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 te encuentras con 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.
Esto debería haber funcionado incluso sin abrir los permisos. Consulte la documentación: Autenticación de registro privado .
[Editar: en realidad, también tuve problemas de permisos al hacer una segunda prueba. Consulte Docker push to AWS ECR private repo fallando con JSON malformado ).]
Sin embargo, tuve el mismo problema; No sé por qué, pero utilicé con éxito el mecanismo de autenticación más extenso descrito en los documentos para obtener el token de autorización.
Versiones de AWS CLI y 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 a34a1d5Obtenga el token de autenticación ('contraseña de Docker').
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 de 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: 4378Experimenté el mismo problema.
La generación de nuevas credenciales de AWS (claves de acceso) y la reconfiguración de la AWS CLI con nuevas credenciales resolvieron el problema.
Anteriormente, aws ecr get-login --region us-east-1 generó un comando de inicio de sesión de Docker con una URL de registro EC no válida.
si ejecuta $(aws ecr get-login --region us-east-1) todo estará listo para usted
get-login ahora está obsoleto en la versión 1 de la AWS CLI. Si está utilizando la versión 2 de la AWS CLI, debe usar get-login-password .
Puede canalizar la salida de get-login-password a su comando de inicio de sesión de docker para autenticar docker en su registro ECR:
aws ecr get-login-password | docker login --username AWS --password-stdin ####.dkr.ecr.us-east-1.amazonaws.com Ahora debería poder docker push y hacer que vaya directamente a su registro ECR.
Si usa perfiles, no olvide pasar --profile=XXX a aws ecr get-login .
También encontramos este problema hoy e intentamos todo lo mencionado en esta publicación (excepto generar credenciales de AWS).
Finalmente resolvimos el problema simplemente actualizando Docker, luego funcionó.
El problema se encontró con Docker 1.10.x y se resolvió con Docker 1.11.x.
Espero que esto ayude
En mi caso, se trataba de un error con Docker para Windows y su compatibilidad con el Administrador de credenciales de Windows.
Abra su ~/.docker/config.json y elimine la "credsStore": "wincred" .
Esto hará que las credenciales se escriban directamente en config.json . Tendrás que iniciar sesión de nuevo después.
Puede rastrear este error a través de los tickets #22910 y #24968 en GitHub.
Me encontré con este problema también corriendo en OSX. Vi la respuesta de Oliver Salzburg y revisé mi ~/.docker/config.json. Tenía múltiples credenciales de autorización dentro de las diferentes cuentas de AWS que tengo. Eliminé el archivo y después de ejecutar get-login nuevamente funcionó.
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-2Cuando me topé con este problema, no estaba claro para mí, según 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 en el portapapeles con
aws ecr get-login --region ap-southeast-2 | pbcopyPegue el resultado en la línea de comando y ejecútelo.
Tuve este problema por 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 (p. ej., arn:aws:iam::{AWS ACCT #}:user/{Username} ) como Principal. Intenté 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 basic auth credentials . Resulta que aws ecr get-login inicia sesión en el 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 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.
eval $(aws ecr get-login --region us-east-1)eval $(aws ecr get-login --region us-east-1 --profile your-profile)docker build -t image-name .docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latestdocker 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 con aws ecr get-login son temporales y vencerán.
Yo 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ó una gran mancha, que incluye el comando de inicio 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 el comando push de la ventana acoplable que se parece a esto:
docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilenameSi está aislando cuentas de AWS con fines de CI/CD y tiene un repositorio de ECR compartido entre varias cuentas de AWS, es posible que deba cambiar ~/.docker/config.json manualmente.
Digamos que tiene estas configuraciones:
0000000000000099999999999999 Si llama a aws ecr get-login --region us-west-2 | bash dentro de su servidor CI, la ventana acoplable generará credenciales temporales en ~/.docker/config.json .
{ "auths": { "https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": { "auth": "long-token.." } } }Pero desea apuntar a 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 forma el usuario o la política de IAM para permitir el acceso a ECR.
Debe asegurarse de haber iniciado sesión con las credenciales correctas. Consulte la descripción oficial del error y verifique aquí.
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
La corrección de "sin autenticación básica" se describe en el enlace
Enfrenté el 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 la ruta anterior, aquí es donde cometí el error: en "dkr.ecr.us-east-1.amazonaws.com" en lugar de "west" . Estaba usando " east" . Una vez que corregí mi error, pude enviar la imagen con éxito.
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.comen lugar de
docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.comConsulte también la página de resolución de problemas .
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, omití el --region [region_name] , que también generó 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 eso ayude a alguien!
Asegúrese de utilizar la región correcta en aws ecr get-login , debe coincidir con la región en la que se creó su repositorio.
aws ecr get-login --region us-west-1 --no-include-emailEste comando me da el comando correcto para iniciar sesión. Si no usa "--no-include-email", arrojará otro error. El resultado del comando anterior se parece a este docker login -u AWS -p *********************muy grande******. Copia eso y ejecútalo. Ahora mostrará "Inicio de sesión exitoso". Ahora puede enviar su imagen a ECR.
Asegúrese de que su regla AMI tenga el permiso para el usuario que intentó iniciar sesión.
Prueba con:
eval $(aws ecr get-login --no-include-email | sed 's|https://||')antes de empujar.
Simplemente ejecute lo que sea devuelto en el paso uno solucionaría el problema.
Ese mensaje de error proviene de la ventana acoplable y no está necesariamente relacionado con AWS, ya que recibí el mismo error cuando no uso AWS ... solo dice que la ventana acoplable 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 rebotar mi registro de Docker local, Docker Push estaba bien
Mi problema era tener varias credenciales de AWS; por defecto y dev. Como estaba tratando de implementar para desarrollar esto funcionó:
$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')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 la ventana acoplable desde la salida
docker login -u AWS -p epJ....
es la forma en que Docker inicia sesión en ECR
FWIW, Debian 9, Docker versión 18.06.1-ce, compilación e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
En mi caso (y probablemente en todos los casos), este error se debió a que tenía varias cuentas de AWS. Por lo tanto, AWS ECR no utiliza las credenciales de AWS correctas asociadas con la cuenta de AWS.
Probé varias soluciones mencionadas aquí, pero no tuve éxito. Funcionó después de usar tokens en lugar de nombre de usuario y contraseña . Lo hice funcionar siguiendo las instrucciones aquí. https://btburnett.com/2017/01/docker-login-for-amazon-aws-ecr-using-windows-powershell.html
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)Agrego la opción de región y todo funciona bien para mí:
aws ecr get-login --no-include-email --region eu-west-3El comando docker dado por aws-cli está un poco fuera de lugar...
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 .
Utilice 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á el mensaje 'Login Succeeded' y luego estará bien
después de eso, su comando de inserción debería funcionar
En mi caso, después de ejecutar aws ecr get-login --no-include-email --region ***** , solo copié el resultado de ese comando con la forma docker login -u *** -p ************ , y lo pega en el aviso. El empujón siguió adelante.
En Windows en PowerShell , use:
Invoke-Expression $(aws ecr get-login --no-include-email)El siguiente comando funciona para mí:
sudo $(aws ecr get-login --region us-east-1 --no-include-email)Y luego ejecuto estos comandos:
sudo docker tag e9ae3c220b23(image_id) aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app sudo docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-web-appPubliqué una respuesta a esto en los foros de Docker. En mi caso, el problema fue que centos "docker" no era equivalente a Docker CE y, por lo tanto, falló con:
sin autenticación básica
Simplemente lo arreglé instalando "docker-ce" en centos.
Referencia: https://forums.docker.com/t/docker-push-to-ecr-failing-with-no-basic-auth-credentials/17358/30
Este error generalmente se produce si el inicio de sesión de ecr ha fallado. Estoy usando el sistema de Windows y usé "Powershell" en modo Administrador para iniciar sesión en ecr primero.
Invoke-Expression $(aws ecr get-login --no-include-email)Esto debería generar "Inicio de sesión exitoso".
cat ~/.docker/config.json
Resultado de la muestra:
{ "auths": { "https://55511155511.dkr.ecr.us-east-1.amazonaws.com": {} }, "HttpHeaders": { "User-Agent": "Docker-Client/19.03.5 (darwin)" }, "credsStore": "osxkeychain" }Tenga en cuenta que el valor "auths" es un objeto vacío y la ventana acoplable utiliza un almacén de credenciales "osxkeychain".
Observe el campo Where:
~/.docker/config.json auths con el campo Where: en Acceso a Llaveros. Si la clave de autenticación en ~/ auths /config.json NO coincide con el campo Where: en el llavero, puede obtener un inicio de Login Succeeded desde el inicio de sesión de la ventana docker login... pero aún así obtener ERROR: Service 'web' failed to build: Get https://55511155511.dkr.ecr.us-east-1.amazonaws.com/v2/path/to/image/latest: no basic auth credentials cuando intenta extraer.
En mi caso, necesitaba agregar https://
Original
"auths": { "55511155511.dkr.ecr.us-east-1.amazonaws.com": {} },Reparado
"auths": { "https://55511155511.dkr.ecr.us-east-1.amazonaws.com": {} },Hay una forma muy sencilla de enviar imágenes acoplables a ECR: Amazon ECR Docker Credential Helper . Simplemente instálelo de acuerdo con la guía provista, actualice su ~/.docker/config.json de la siguiente manera:
{ "credsStore": "ecr-login" } y podrá empujar/tirar de sus imágenes sin docker login .
Estaba enfrentando el mismo problema y lo solucioné con este comando. Funciona para mí, actualícelo según su cuenta. Esto es para la máquina Ubuntu donde AWS-CLI debe instalarse con Docker
algorithm_name='multi-model-xgboost' account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration region=$(aws configure get region) aws ecr get-login-password --region ${region} | docker login --username AWS --password-stdin ${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name} Dado que AWS CLI versión 2, aws ecr get-login está en desuso y el método correcto es aws ecr get-login-password .
Por lo tanto, la respuesta correcta y actualizada es la siguiente: docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
Acaba de haber una actualización en la que se eliminó get-login de AWS, en su lugar use get-login-password:
sudo docker login -u AWS -p $(aws ecr get-login-password --region <region> - -profile <profile>) <account id>.dkr.ecr.eu-north-1.amazonaws.comNo olvide eliminar la marca --profile si usa las credenciales predeterminadas
Solo agregando a esto, en caso de que alguien esté sufriendo por no haber leído nunca el Manual F como yo.
Seguí todos los pasos sugeridos desde arriba, como
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.eu-west-1.amazonaws.com Y siempre obtuve las credenciales de autenticación no básicas
Había creado un registro llamado
123456789.dkr.ecr.eu-west-1.amazonaws.com/my.registry.com/namespacey estaba tratando de enviar una imagen llamada alpine:latest
123456789.dkr.ecr.eu-west-1.amazonaws.com/my.registry.com/namespace/alpine:latest 2c6e8b76de: Preparing 9d4cb0c1e9: Preparing 1ca55f6ab4: Preparing b6fd41c05e: Waiting ad44a79b33: Waiting 2ce3c1888d: Waiting no basic auth credentials Error tonto de mi parte, ya que debo crear un registro en ecr usando la ruta completa del contenedor.
Creé un nuevo registro usando la ruta completa del contenedor, sin terminar en el espacio de nombres
123456789.dkr.ecr.eu-west-1.amazonaws.com/my.registry.com/namespace/alpiney bajo y he aquí empujando a
123456789.dkr.ecr.eu-west-1.amazonaws.com/my.registry.com/namespace/alpine:latest The push refers to repository [123456789.dkr.ecr.eu-west-1.amazonaws.com/my.registry.com/namespace/alpine] 0c8667b5b: Pushed 730460948: Pushed 1.0: digest: sha256:e1f814f3818efea45267ebfb4918088a26a18c size: 7funciona bien
I had to run aws ecr get-login-password due to aws cli deprecating the get-login command.
Also in this version the username is forced to be hard coded as AWS.
Here was the command that worked for aws-cli/2.0.58.
aws ecr get-login-password --region region_y | docker login --username AWS --password-stdin account_x.dkr.ecr.region_y.amazonaws.comInicio de sesión exitoso
En el sistema Windows, debe vaciar el siguiente archivo ~/.docker/config.json y luego ejecutar nuevamente el siguiente script
aws ecr get-login --no-include-email --region ap-southeast-1 --profile [profile_name]La CLI de Docker no admite métodos de autenticación nativos de IAM. Para autenticar y autorizar las solicitudes de inserción y extracción de Docker, siga este paso.
Paso 1
Compruebe si las credenciales de aws están configuradas correctamente o no. Para configurar las credenciales de AWS, ejecute el siguiente comando y proporcione sus credenciales de AWS.
aws configurepaso 2
puede autenticar Docker en un registro privado de Amazon ECR con get-login-password (recomendado)
linux y msc
aws ecr get-login-password --region <your region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<your region>.amazonaws.compara ventanas
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.<your region>.amazonaws.como
también puede usar el método --get-login (pero exponer las credenciales) (no recomendado).
para linux y mac
$(aws ecr get-login --region <your region> --no-include-email)para ventanas
Invoke-Expression -Command (Get-ECRLoginCommand -Region <your region>).Commandsi obtuvo el inicio de sesión exitoso, entonces está listo para continuar. de lo contrario, consulte los documentos de aws para ver si hay un error
paso 3
Empuje su imagen al repositorio
Etiqueta tu imagen
etiqueta acoplable <aws_account_id>.dkr.ecr..amazonaws.com/my-web-app
Empuje su imagen con el siguiente comando.
Docker Push <aws_account_id>.dkr.ecr..amazonaws.com/my-web-app
Nota: este es un inicio de sesión basado en token y el token de autorización generado es válido solo por 12H
Asegúrese de que el usuario con el que está ejecutando Docker localmente sea el que usará para eventualmente enviar la imagen. Para mí, ejecutar con Sudo causó el problema. Eliminar sudo del comando lo resolvió. Espero que esto ayude y ahorre tiempo a alguien y que nadie vuelva a cometer el mismo error tonto. A continuación se muestra la salida para su referencia.
sudo docker push {your-account-id}.dkr.ecr.us-east-1.amazonaws.com/{repository-name}:{tag-name} The push refers to repository [{your-account-id}.dkr.ecr.us-east-1.amazonaws.com/{repository-name}] f13afaa342eb: Preparing d01b75ce3235: Preparing 7eaa58141607: Preparing 519e8c5b2557: Preparing 15d4a3a33fec: Preparing fdbbf41b1ab8: Waiting 4b88ecda5399: Waiting e23a8e1e773f: Waiting 6623e2cc11cd: Waiting no basic auth credentialsCorrer sin el sudo funcionó perfectamente bien
docker push {your-account-id}.dkr.ecr.us-east-1.amazonaws.com/{repository-name}:{tag-name} The push refers to repository [{your-account-id}.dkr.ecr.us-east-1.amazonaws.com/{repository-name}] f13afaa342eb: Pushed d01b75ce3235: Pushed 7eaa58141607: Pushed 519e8c5b2557: Pushed 15d4a3a33fec: Pushed fdbbf41b1ab8: Pushed 4b88ecda5399: Pushed e23a8e1e773f: Pushed 6623e2cc11cd: Pushed {tag-name}: digest: sha256:5ceaa5bf7605559582960b6d56a8eece9486ce0950bca9dd63a0dcd38a520bf0 size: 4293Así que instalé aws-credentials-helper descargando el repositorio y compilándolo yo mismo. Descubrí que usé el comando de compilación incorrecto: make docker en lugar de make docker TARGET_GOOS=darwin (estoy en Mac). El bin/local/docker-credential-ecr-login resultante no era ejecutable inicialmente.
Yo estaba luchando con lo mismo. Siga los pasos a continuación:
Tenga en cuenta: en .dkr.ecr.us-west-2.amazonaws.com, la región sería su región predeterminada. Es us-west-2 para mí, por lo tanto, lo mismo.
Espero que esto te ahorre tiempo.
AWS obsoleto get-login en lugar de eso, use el siguiente comando
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <ecr-repo-full-path>ejemplo
aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 607348619222.dkr.ecr.ap-south-1.amazonaws.com