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 de Docker. Luego inicié 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 "no basic auth credentials"
error. 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. A pesar de que estaba usando aws configure
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 lo 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.
fuente
Respuestas:
si corres,
$(aws ecr get-login --region us-east-1)
todo estará hecho por tifuente
docker login
se ejecutará el comando.En mi caso, esto fue un error con Docker para Windows y su soporte para el Administrador de credenciales de Windows.
Abra su
~/.docker/config.json
y elimine la"credsStore": "wincred"
entrada.Esto hará que las credenciales se escriban
config.json
directamente en el. Tendrás que iniciar sesión nuevamente después.Puede rastrear este error a través de los tickets # 22910 y # 24968 en GitHub.
fuente
~/.docker
significa.docker
en su directorio de inicio. Prueba%HOMEDRIVE%%HOMEPATH%\.docker
Si usa perfiles, no olvide pasar
--profile=XXX
aaws ecr get-login
.fuente
También tuve este problema. Lo que sucedió conmigo fue que olvidé ejecutar el comando que me devolvieron después de ejecutar
Este comando devolvió un gran blob, que incluye el
docker login
comando allí mismo. No me di cuenta Debería devolver algo como esto:Copie y pegue este comando y luego ejecute el comando push docker que se parece a esto:
fuente
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. Consulte 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 extenso descrito en los documentos para obtener el token de autorización
AWS CLI y versiones de Docker:
Obtenga el token de autenticación ('contraseña del acoplador').
Nota: Mi ~ / .aws / config especifica una región predeterminada diferente, por lo que necesitaba establecerla explícitamente
--region us-east-1
.Inicie sesión de forma interactiva (cambie
############
a su ID de cuenta de AWS):Empuje una imagen (suponiendo que haya creado una imagen acoplable
test
):fuente
aws ecr get-authorization-token > config.json
y luego abrirlo en tu editor de texto favorito para copiar y pegar a voluntadProbar con:
Antes de empujar.
fuente
no basic auth credentials Invalid IPv6 URL
Actualizar
Desde AWS CLI versión 2 -
aws ecr get-login
está en desuso y el método correcto esaws 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
fuente
unknown flag: --region
Si ayuda a alguien ...
Mi problema fue que tuve que usar la
--profile
opción para autenticarme con el perfil adecuado del archivo de credenciales.Luego, había omitido el
--region [region_name]
comando, 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!
fuente
AWS_PROFILE=myprofile aws ecr get-login
y no funcionó, ¡pero presentar el perfil de aws con--profile
argumento hace el truco!Hay un error conocido en el administrador de credenciales wincred en Windows. Eliminar 'https: //' del comando de inicio de sesión generado resuelve esto.
en vez de
Vea también la página de solución de problemas .
fuente
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
comando de inicio de sesión acoplado generado con URL de registro EC no válida.fuente
En Windows en PowerShell , use:
fuente
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:Lo que por supuesto resultó en
no basic auth credentials
. Como resultado ,aws ecr get-login
inicia sesión en la ECR para el registro asociado a su inicio de sesión , lo que tiene sentido en retrospectiva. La solución es decir enaws ecr get-login
qué registro (s) desea iniciar sesión.Después de eso,
docker push
funciona bien.fuente
--profile
? Tengo una cuenta personal pero intento ingresar a una cuenta de empresa. En otras palabras, ¿dónde encuentro?profilename
Luego, según las instrucciones de comando de inserción de ECR, corte y pegue los siguientes comandos
eval $(aws ecr get-login --region us-east-1)
agregue --perfil si utiliza varias cuentas de AWS
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:latest
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
aws ecr get-login
son temporales y caducarán.fuente
your-profile
?~/.aws/config
y~/.aws/credentials
.En mi caso, después de ejecutar
aws ecr get-login --no-include-email --region *****
, simplemente copié el resultado de ese comando con el formulariodocker login -u *** -p ************
y lo pegó en el indicador. El empuje siguió adelante.fuente
Los documentos de AWS le indican que ejecute el siguiente comando (para la región ap-sureste-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
Pegue el resultado en la línea de comando y ejecútelo
fuente
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
fuente
Este error generalmente se genera 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.
Esto debería mostrar "Inicio de sesión exitoso".
fuente
Me enfrenté al mismo problema y el error que cometí fue usar la ruta de repositorio incorrecta
p.ej:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
En el camino anterior, aquí es donde he cometido 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.fuente
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 debajo de
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 llamado7272727.dkr.ecr.us-east-1.amazonaws.com
nohttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Use el siguiente comando para iniciar sesión:
Una vez que ejecute el comando, recibirá un
'Login Succeeded'
mensaje y, a continuación, estará bien,su comando push debería funcionar
fuente
Hay una manera muy simple de llevar las imágenes de Docker a ECR: Amazon ECR Docker Credential Helper . Simplemente instálelo de acuerdo con la guía provista, actualice su
~/.docker/config.json
como sigue:y podrás empujar / tirar tus imágenes sin
docker login
.fuente
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 en su interior de las diferentes cuentas de AWS que tengo. Eliminé el archivo y después de ejecutar get-login nuevamente funcionó.
fuente
Asegúrese de utilizar la región correcta
aws ecr get-login
, debe coincidir con la región en la que se crea su repositorio.fuente
Mi problema era tener múltiples credenciales de AWS; default y dev. Como estaba tratando de implementar para dev esto funcionó:
fuente
FWIW, Debian 9, Docker versión 18.06.1-ce, compilación e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
fuente
Si usa varios perfiles y necesita iniciar sesión en un perfil que no es el predeterminado, debe iniciar sesión con este comando:
fuente
El siguiente comando funciona para mí:
Y luego ejecuto estos comandos:
fuente
También encontramos 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
fuente
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 cambiarlo
~/.docker/config.json
manualmente.Digamos que tiene estas configuraciones:
00000000000000
99999999999999
Si llama
aws ecr get-login --region us-west-2 | bash
dentro de su servidor CI, Docker generará credenciales temporales en~/.docker/config.json
.Pero desea señalar la cuenta de ECR, por lo que debe cambiar el nombre de host.
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.
fuente
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 fijación "sin autenticación básica" se describe en el enlace
fuente
Este 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 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.
fuente