Estou tentando enviar uma imagem do docker para um registro do Amazon ECR. Estou usando o cliente docker Docker versão 1.9.1, build a34a1d5
. Eu uso aws ecr get-login --region us-east-1
para obter os creds de login do docker. Então eu logo com sucesso com esses creds da seguinte maneira:
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
Mas quando tento enviar minha imagem, recebo o seguinte erro:
$ 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
Verifiquei se o usuário do aws tinha as permissões corretas. Também assegurei-me de que o repositório permitisse que o usuário enviasse para ele. Apenas para garantir que não foi um problema, configurei o registro para permitir acesso total a todos os usuários. Nada muda o "no basic auth credentials"
erro. Não sei como começar a depurar isso, pois todo o tráfego é criptografado.
ATUALIZAR
Então, tive um momento do Homer Simpson D'Oh quando percebi a causa raiz do meu problema. Eu tenho acesso a várias contas da AWS. Embora eu estivesse usando aws configure
para definir minhas credenciais para a conta em que havia configurado meu repositório, o aws cli estava realmente usando as variáveis de ambiente AWS_ACCESS_KEY_ID
e AWS_SECRET_ACCESS_KEY
. Então, quando o fiz aws ecr get-login
, estava retornando um login para a conta errada. Não percebi que os números das contas eram diferentes até que voltei agora para tentar algumas das respostas propostas. Quando removo as variáveis de ambiente, tudo funciona corretamente. Eu acho que o lema da história é que, se você acertar esse erro, verifique se o repositório em que você está acessando corresponde à marca que você aplicou à imagem.
fonte
Respostas:
se você executar,
$(aws ecr get-login --region us-east-1)
tudo será feito para vocêfonte
docker login
comando será executado.No meu caso, houve um erro no Docker for Windows e no suporte ao Windows Credential Manager.
Abra o seu
~/.docker/config.json
e remova a"credsStore": "wincred"
entrada.Isso fará com que as credenciais sejam gravadas
config.json
diretamente. Você precisará fazer login novamente depois.Você pode rastrear esse bug nos tickets # 22910 e # 24968 no GitHub.
fonte
~/.docker
significa.docker
no seu diretório pessoal. Tente%HOMEDRIVE%%HOMEPATH%\.docker
Se você usa perfis, não esqueça de passar
--profile=XXX
paraaws ecr get-login
.fonte
Eu tive esse problema também. O que aconteceu comigo foi que eu esqueci de executar o comando que me foi devolvido após a execução
Este comando retornou um grande blob, que inclui o
docker login
comando ali mesmo! Eu não percebi. Deve retornar algo como isto:Copie e cole este comando e, em seguida, execute o comando docker push que se parece com isso:
fonte
Isso deveria ter funcionado mesmo sem abrir as permissões. Consulte a documentação: Autenticação de registro particular .
[Editar: na verdade, eu também tive problemas com permissões ao fazer um segundo teste. Consulte Envio do Docker ao repositório particular da AWS ECR falhando com JSON malformado .]
No entanto, eu tive o mesmo problema; Não sei por que, mas usei com êxito o mecanismo de autenticação mais extenso descrito nos documentos para o token de autorização de obtenção
Versões da AWS CLI e Docker:
Obtenha o token de autenticação ('senha do docker').
Nota: Meu ~ / .aws / config especifica uma região padrão diferente, então eu precisei definir explicitamente
--region us-east-1
.Faça logon interativamente (mude
############
para o ID da sua conta da AWS):Envie uma imagem (assumindo que você criou uma imagem do Docker
test
):fonte
aws ecr get-authorization-token > config.json
e abra-o no seu editor de texto favorito para copiar e colar à vontadeTente com:
antes de empurrar.
fonte
no basic auth credentials Invalid IPv6 URL
Atualizar
Desde que o AWS CLI versão 2 -
aws ecr get-login
foi preterido e o método correto éaws ecr get-login-password
.Portanto, a resposta correta e atualizada é a seguinte:
docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
fonte
unknown flag: --region
Se isso ajuda alguém ...
Meu problema era que eu tinha que usar a
--profile
opção para autenticar com o perfil adequado do arquivo de credenciais.Em seguida, omiti o
--region [region_name]
comando, que também deu o erro "sem credenciais de autenticação básica".A solução para mim foi mudar meu comando a partir disso:
aws ecr get-login
Para isso:
aws --profile [profile_name] ecr get-login --region [region_name]
Exemplo:
aws --profile foo ecr get-login --region us-east-1
Espero que ajude alguém!
fonte
AWS_PROFILE=myprofile aws ecr get-login
e não funcionou, mas a introdução do perfil do aws com--profile
argumento é o truque!Há um bug conhecido no gerenciador de credenciais do wincred no Windows. A remoção de 'https: //' do comando de login gerado resolve isso.
ao invés de
Consulte também a página de solução de problemas .
fonte
Eu experimentei o mesmo problema.
A geração de novas credenciais da AWS (chaves de acesso) e a reconfiguração da AWS CLI com novas credenciais resolveram o problema.
aws ecr get-login --region us-east-1
Comando de login do docker gerado anteriormente com URL de registro EC inválido.fonte
No Windows no PowerShell , use:
fonte
Eu tive esse problema por uma causa diferente: precisava enviar para um registro não associado à minha conta da AWS (registro de ECR de um cliente). O cliente me concedeu acesso na guia Permissões do registro, adicionando meu ID do IAM (por exemplo,
arn:aws:iam::{AWS ACCT #}:user/{Username}
) como Principal. Tentei fazer o login com as etapas usuais:O que, obviamente, resultou
no basic auth credentials
. Como se vê ,aws ecr get-login
efetua login no ECR para o registro associado ao seu logon , o que faz sentido em retrospecto. A solução é informar emaws ecr get-login
quais registros você deseja fazer login.Depois disso,
docker push
funciona muito bem.fonte
--profile
? Eu tenho uma conta pessoal, mas estou tentando enviar para uma conta corporativa. Em outras palavras, onde encontroprofilename
Em seguida, de acordo com as Instruções de comando push do ECR, recorte e cole os seguintes comandos
eval $(aws ecr get-login --region us-east-1)
adicione --profile se você usar várias contas da 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
Em caso de erro, certifique-se de executar todos os comandos novamente! As credenciais que você usa
aws ecr get-login
são temporárias e expiram.fonte
your-profile
?~/.aws/config
e~/.aws/credentials
.No meu caso, após a execução
aws ecr get-login --no-include-email --region *****
, eu apenas copiei a saída desse comando com é do formuláriodocker login -u *** -p ************
e você a cola no prompt. O empurrão foi em frente.fonte
Os documentos da AWS dizem para você executar o seguinte comando (para a região ap-sudeste-2)
Quando deparei com esse problema, não estava claro para mim, com base nesses documentos, que você precisava inserir o resultado desse comando no terminal e executá-lo.
A correção que funcionou para mim foi copiar o resultado na área de transferência com
Cole o resultado na linha de comando e execute-o
fonte
Depois de executar este comando:
(aws ecr get-login --no-include-email --region us-west-2)
basta executar o comando docker login a partir da saída
docker login -u AWS -p epJ....
é a maneira como o docker efetua login no ECR
fonte
Esse erro geralmente é gerado se o login ecr falhou. Estou usando o sistema Windows e usei o "Powershell" no modo Administrador para fazer login na tela primeiro.
Isso deve gerar "Login bem-sucedido".
fonte
Eu enfrentei o mesmo problema e o erro que cometi foi usar o caminho de repo incorreto
por exemplo:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
No caminho acima, foi aqui que cometi o erro: Em
"dkr.ecr.us-east-1.amazonaws.com"
vez de"west"
. Eu estava usando "east"
. Depois que corrigi meu erro, fui capaz de enviar a imagem com êxito.fonte
O comando docker dado pelo aws-cli está pouco ...
Ao usar o login do docker, o docker salvará um par de chaves server: no seu keychain ou no arquivo ~ / .docker / config.json
Se ele salva a chave sob
https://7272727.dkr.ecr.us-east-1.amazonaws.com
a pesquisa para a chave durante o impulso irá falhar porque janela de encaixe vai estar à procura de um servidor chamado7272727.dkr.ecr.us-east-1.amazonaws.com
nãohttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Use o seguinte comando para efetuar login:
Depois de executar o comando, você receberá uma
'Login Succeeded'
mensagem e estará bomdepois que o comando push deve funcionar
fonte
Há uma maneira muito simples de enviar imagens do docker para o ECR: Amazon ECR Docker Credential Helper . Basta instalá-lo de acordo com o guia fornecido, atualizar o seu
~/.docker/config.json
da seguinte forma:e você poderá empurrar / puxar suas imagens sem
docker login
.fonte
Eu corri para esse problema também em execução no OSX. Eu vi a resposta de Oliver Salzburg e verifiquei meu ~ / .docker / config.json. Ele tinha várias credenciais de autorização dentro das diferentes contas da AWS que eu tenho. Eu apaguei o arquivo e depois de executar o get-login novamente, ele funcionou.
fonte
Certifique-se de usar a região correta
aws ecr get-login
, ela deve corresponder à região em que seu repositório é criado.fonte
Meu problema foi ter várias credenciais da AWS; padrão e dev. Desde que eu estava tentando implantar para dev isso funcionou:
fonte
FWIW, Debian 9, Docker versão 18.06.1-ce, compilação e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
fonte
Se você usar vários perfis e precisar fazer login em um perfil que não seja o padrão, faça o login com este comando:
fonte
O comando a seguir funciona para mim:
E então eu executo estes comandos:
fonte
Também encontramos esse problema hoje e tentamos tudo mencionado nesta postagem (exceto a geração de credenciais da AWS).
Finalmente, resolvemos o problema simplesmente atualizando o Docker e o envio funcionou.
O problema foi encontrado com o Docker 1.10.x e foi resolvido com o Docker 1.11.x.
Espero que isto ajude
fonte
Se você estiver isolando as contas da AWS para fins de IC / CD e tiver um repositório de ECR compartilhado entre várias contas da AWS, poderá ser necessário alterar o
~/.docker/config.json
manualmente.Digamos que você tenha estas configurações:
00000000000000
99999999999999
Se você ligar
aws ecr get-login --region us-west-2 | bash
no servidor de IC, o docker gerará credenciais temporárias~/.docker/config.json
.Mas você deseja apontar para a conta do ECR, portanto, você precisa alterar o nome do host.
Observe que essa situação depende de como você forma a política / usuário do IAM para permitir o acesso ao ECR.
fonte
Você precisa se certificar de que fez login usando credenciais corretas. Consulte a descrição oficial do erro e verifique aqui
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
A correção "sem autenticação básica" é descrita no link
fonte
Este comando me dá o comando correto para efetuar login. Se você não usar "--no-include-email", isso gerará outro erro. A saída do comando acima se parece com esse login na janela de encaixe -u AWS -p ********************** muito grande ******. Copie isso e execute-o. Agora ele mostrará "Login com êxito". Agora você pode enviar sua imagem para ECR.
Verifique se a regra da AMI tem permissão para o usuário que você tentou fazer login.
fonte