Estoy tratando de configurar la imagen de la ventana acoplable de Amazon ECR en la máquina ubuntu18.04 de AWS, utilizando los comandos proporcionados por los comandos view push commands de Amazon Container Services 
, tenga en cuenta que ya configuré docker en mi ubuntu18.04 y también la salida de docker -v es la siguiente
ubuntu@ip-172-31-0-143:~$ docker -v Docker version 19.03.7, build 7141c199a2Cuando ejecuto el comando proporcionado por Amazon Container Services en aws cli en ubuntu18.04, aparece el error Error: No se puede realizar un inicio de sesión interactivo desde un dispositivo que no es TTY
El comando que estoy usando es
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 8233251134332.dkr.ecr.us-east-2.amazonaws.com/gatling-lots tenga en cuenta que configuré correctamente awscli y puedo ver los detalles de aws s3 ls
Aquí está el registro de errores detallado
ubuntu@ip-172-31-0-143:~$ aws ecr get-login-password --region us- east-2 | docker login --username AWS --password-stdin 823443336.dkr.ecr.us-west-2.amazonaws.com/gatling-lots usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters] To see help text, you can run: aws help aws <command> help aws <command> <subcommand> help aws: error: argument operation: Invalid choice, valid choices are: batch-check-layer-availability | batch-delete-image batch-get-image | complete-layer-upload create-repository | delete-lifecycle-policy delete-repository | delete-repository-policy describe-images | describe-repositories get-authorization-token | get-download-url-for-layer get-lifecycle-policy | get-lifecycle-policy-preview get-repository-policy | initiate-layer-upload list-images | put-image put-lifecycle-policy | set-repository-policy start-lifecycle-policy-preview | upload-layer-part get-login | help Error: Cannot perform an interactive login from a non TTY devicesalida de
ubuntu@ip-172-31-0-143:~$ (aws ecr get-login --no-include-email --region us-east-2) docker login -u AWS -p MzQxL2c0Yks4RjVxeDg9IiwidmVyc2lvbiI6IjIiLCJ0eXBlIjoiREFUQV9LRVkiLCJleHBpcmF0aW9uIjoxNTgzNjgzNDY5fQ== https://825251119036.dkr.ecr.us- east-2.amazonaws.comEl problema no es aws sino docker. La solución está en la ventana acoplable para usar el parámetro -p y ajustar la llamada de inicio de sesión de aws al parámetro -p como tal:
docker login -u AWS -p $(aws ecr get-login-password --region the-region-you-are-in) xxxxxxxxx.dkr.ecr.the-region-you-are-in.amazonaws.comY esto requiere AWS CLI versión 2.
Los pasos a continuación son para resolver ese problema.
$curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install $aws --version aws-cli/2.0.30 Python/3.7.3 Linux/4.14.181-142.260.amzn2.x86_64 botocore/2.0.0dev34 $aws ecr get-login-password --region your_region | docker login --username AWS --password-stdin Account_ID.dkr.ecr.your_region.amazonaws.com Reemplace su Account ID y Region .
Este comando hace el truco en bash y Linux el 2020/10/06:
linux@host:~$ $(aws ecr get-login --no-include-email)
Eso es porque
$ aws ecr get-login --no-include-email
Da la siguiente salida:
docker login -u AWS -p xxxxxxxxxxxxx== https://xxx.dkr.ecr.eu-west-1.amazonaws.com
La respuesta de Devin es correcta.
Pero hay una forma más. La versión actualizada de docker requiere este parámetro --password-stdin .
aws ecr get-login-password --region <YOUR_REGION> | docker login --username AWS --password-stdin <ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.comme tomó una eternidad darme cuenta de que el problema era que olvidé ejecutar aws configure e ingresar los detalles correctos. Eso resolvió mi problema.
Recuerde también que no puede iniciar sesión en regiones particionadas ( cn-* o gov ) mientras utiliza un perfil de AWS no particionado. Agregue --profile foo para especificar un perfil con su región designada.
El inicio de docker login imprime este mensaje de error cuando usa --password-stdin , pero en realidad no envía una contraseña a la entrada estándar del comando.
Por ejemplo:
$ echo "" | docker login --password-stdin --username jorendorff Error: Cannot perform an interactive login from a non TTY device Por lo tanto, casi cualquier tipo de problema con el comando antes del | El símbolo de tubería dará como resultado este mensaje de error inútil.
El problema que encontré es AWS CLI v1 vs AWS CLI v2. Resolví esto desinstalando v1 e instalando AWS CLI v2.
No te preocupes en este caso. Simplemente escriba 'aws configure' en su terminal y pegue las credenciales de seguridad como 'aws_access_key_id' y 'aws_secret_access_key' y luego escriba la región del repositorio y el formato de salida como 'json'.
Funcionó para mí.
Sé que esta pregunta ya está respondida, pero esta fue mi experiencia.
Esto no funcionó para mí inicialmente.
aws ecr get-login-password --region <your-region>| docker login --username AWS --password-stdin <your-container>
Tenía AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY guardados en variables en GitLab.
Pero la solución fue desmarcar la bandera Protected de las variables guardadas en GitLab. No sé qué tan seguro es este enfoque, pero funcionó para mí.
Espero que esto ayude a alguien algún día.