docker não autorizado: autenticação necessária - mediante push com login bem-sucedido

101

Ao enviar a imagem do docker (após login bem-sucedido) do meu host, recebo "não autorizado: autenticação necessária".

Detalhes abaixo.

-bash-4.2# docker login --username=asamba [email protected]
WARNING: login credentials saved in /root/.docker/config.json
*Login Succeeded*
-bash-4.2#
-bash-4.2# docker push asamba/docker-whale

Do you really want to push to public registry? [y/n]: y
The push refers to a repository [docker.io/asamba/docker-whale] (len: 0)
faa2fa357a0e: Preparing
unauthorized: authentication required
  • Versão do Docker: 1.9.1 (cliente e servidor)
  • http://hub.docker.com tem o repositório criado também (asamba / docker-whale).

O / var / log / messages mostra 403, não sei se este docker. Ver abaixo.

Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.884872524Z" level=info msg="{Action=push, Username=asamba, LoginUID=1001, PID=2125}"
Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.884988574Z" level=error msg="Handler for POST /v1.21/images/asamba/docker-whale/push returned error: Error: Status 403 trying to push repository asamba/docker-whale to official registry: needs to be forced"
Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.885013241Z" level=error msg="HTTP Error" err="Error: Status 403 trying to push repository asamba/docker-whale to official registry: needs to be forced" statusCode=403
Apr 16 11:39:05 localhost journal: time="2016-04-16T11:39:05.420188969Z" level=info msg="{Action=push, Username=asamba, LoginUID=1001, PID=2125}"
Apr 16 11:39:06 localhost kernel: XFS (dm-4): Mounting V4 Filesystem
Apr 16 11:39:06 localhost kernel: XFS (dm-4): Ending clean mount
Apr 16 11:39:07 localhost kernel: XFS (dm-4): Unmounting Filesystem

Qualquer ajuda é apreciada, por favor me avise se precisar de mais informações. Eu fiz o push com -f também. Sem sorte!

Anand
fonte
1
Seria útil para o administrador do site, bem como para outras pessoas que procuram informações sobre o mesmo problema, se você clicar na marca de seleção ao lado de sua Resposta para marcá-la como "a" resposta :-) Você tem permissão (até mesmo incentivo) para fazer isso no Stack Overflow.
Cindy Meister

Respostas:

88

Editar (13/08/2017)

Com base no comentário de @ KaraPirinc, no docker versão 17 para fazer login (Etapa 1),

docker login -u username -p password

Eu também tive o mesmo problema. É assim que resolvo.

Etapa 1: faça login no hub do docker

docker login --username=<user username> --email=<user email address>

Passo 2: crie um repositório no hub docker . digamos " mysqlserver: sql ".

docker push <user username>/mysqlserver:sql
GPrathap
fonte
7
Esta deve ser a resposta correta . docker logintambém funciona sem os parâmetros
blnc
5
Funciona perfeitamente. No entanto, --email está obsoleto .
IgorGanapolsky
(docker versão 17): docker login -u nome de usuário -p senha
Yusuf Ismail Oktay
obrigado pela atualização. Vou atualizar a resposta com base em seu comentário.
GPrathap de
34

A solução que você postou não está funcionando para mim ...

Isto é o que funciona para mim:

  1. Crie o repositório com o nome desejado.

  2. Ao enviar a imagem, nomeie a imagem como o repositório, incluindo o nome de usuário <dockerusername>/desired-name. Por exemplo radu/desired-name,.

Radu Gabriel
fonte
# docker ps -a obter o nome do conainer --nostalgic_morse aqui # docker commit -m "test" -a "alex" nostalgic_morse alexcpn / grpc # docker push alexcpn / grpc
Alex Punnen
28

ESTÁ BEM! deixa pra lá; Eu encontrei a solução. com 403 Suspeito de que o HTTP não está indo para o URL correto.

Altere o arquivo que tem as credenciais de login armazenadas ~/.docker/config.jsondo padrão gerado de

{
        "auths": {
                "docker.io": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "[email protected]"
                }
        }
}

para - Observe a mudança de docker.io -> index.docker.io/v1. Essa é a mudança.

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "[email protected]"
                }
        }
}

Espero que ajude.

Observe que o campo de autenticação deve ser 'nome de usuário: senha "codificado em base64. Por exemplo:" nome de usuário: senha "codificado em base64 é" dXNlcm5hbWU6cGFzc3dvcmQ = "

portanto, seu arquivo conteria:

"auth": "dXNlcm5hbWU6cGFzc3dvcmQ="
Anand
fonte
Você me salvou um bom tempo! Solução perfeita para mim também.
Marco Lenzo
7
Funcionou para mim também. Aqui está a mesma coisa da linha de comando:sudo docker login -e [email protected] -u someuser -p somepass https://index.docker.io/v1/
Banjer
2
Obrigado @Banjer, o parâmetro -e está obsoleto e o sudo não deve ser usado pela maioria dos que configuraram seu sistema corretamente. Uma solução melhor seria: docker login -u someuser https://index.docker.io/v1/Isso vai pedir a senha, evitando que termine no histórico de comandos.
erb
18

se você estiver usando o heroku, certifique-se de não se esquecer de "heroku container: login" antes de empurrar.

bjoern
fonte
7

Eu estava tendo um problema semelhante com uma mensagem de erro igualmente inútil, mas acabou sendo porque eu estava tentando enviar uma imagem que eu havia criado em uma instância gerenciada da máquina docker.

Quando loguei na própria instância, fiz docker logine docker pushtudo funcionou bem.

atomic77
fonte
obrigado, o login do docker cria automaticamente o arquivo de configuração conforme descrito no link
Felix
7

Eu tive o mesmo problema, mas corrigi-lo com push com url especificado. como: docker login -u https://index.docker.io/v1/

saída do console:

The push refers to a repository [docker.io/<username>/richcity]
adc9144127c1: Preparing 
4db5654f7a64: Preparing 
ce71ae73bc60: Preparing 
e8e980243ee4: Preparing 
d773e991f7d2: Preparing 
bae23f4bbe95: Waiting 
5f70bf18a086: Waiting 
3d3e4e34386e: Waiting 
e72d5d9d5d30: Waiting 
8d1d75696199: Waiting 
bdf5b19f60a4: Waiting 
c8bd8922fbb7: Waiting 
unauthorized: authentication required

1010deiMac:dockerspace whoami$ docker login -u <username> https://index.docker.io/v1/
Password: 
Login Succeeded
1010deiMac:dockerspace whoami$ docker push <username>/richcity 
The push refers to a repository [docker.io/<username>/richcity]
adc9144127c1: Pushed 
4db5654f7a64: Pushed 
ce71ae73bc60: Pushed 
e8e980243ee4: Pushed 
d773e991f7d2: Pushed 
bae23f4bbe95: Pushed 
5f70bf18a086: Pushed 
3d3e4e34386e: Pushing [=============>                                     ] 45.07 MB/165.4 MB
e72d5d9d5d30: Pushed 
8d1d75696199: Pushing [>                                                  ] 1.641 MB/118.1 MB
bdf5b19f60a4: Pushing [============>                                      ]   142 MB/568.4 MB
c8bd8922fbb7: Pushing [========================>                          ] 59.44 MB/121.8 MB
Gabriel Wu
fonte
5

Embora o processo padrão seja fazer o login e enviar para o docker Registry, o truque para superar esse problema específico é fazer o login fornecendo o nome de usuário e a senha na mesma linha.

Assim :

docker login -u xxx -p yyy sampledockerregistry.com/myapp 
docker push sampledockerregistry.com/myapp

Trabalho

enquanto que

docker login sampledockerregistry.com 
username : xxx
password : yyy
Login Succeeded

docker push sampledockerregistry.com/myapp

Falha

Sukhmeet Sethi
fonte
4

Mesmo eu logado e verificado toda a configuração, ainda não funciona !!!

Descobri que, quando crio meu docker, esqueço de colocar meu nome de usuário antes do nome do repo

docker build docker-meteor-build 

(construir com sucesso)

E então, quando empurrei para o meu repositório, usei

docker push myname/docker-meteor-build 

Vai mostrar o unauthorized authentication required

Então, a solução é o nome do build e o push deve ser exatamente o mesmo

docker build myname/docker-meteor-build 
docker push myname/docker-meteor-build 
Thai Tran
fonte
4

O problema que os novatos enfrentam é que tendemos a tratar o repositório docker hub como um repositório maven e pensar que ele pode conter muitos arquivos, pastas e outros conteúdos diferentes.

Por outro lado, um repositório docker é apenas uma única imagem, não contém mais nada. Ele pode conter diferentes versões da mesma imagem, mas conterá apenas uma imagem.

Portanto, nomeie seu repositório no hub do docker com o mesmo nome da imagem que você deseja enviar para ele e use seu nome de usuário do dockerhub como prefixo. Por exemplo, se o seu nome de usuário é myusername e o nome da imagem é docker-whale , certifique-se de nomear seu repositório dockerhub como docker-whale e use os comandos abaixo para marcar e enviar sua imagem para o repositório:

docker logout                                   # to make sure you're logged out and not cause any clashes
docker tag <imageId> myusername/docker-whale    # use :1.0.0 for specific version, default is 'latest'
docker login --username=myusername              # use the username/pwd to login to docker hub
docker push myusername/docker-whale             # use :1.0.0 for pushing specific version, default is 'latest'
Neeraj B.
fonte
1
Continuei recebendo "negado: o acesso solicitado ao recurso foi negado" até que vi este post. Finalmente, consegui fazer meu primeiro "docker-push" funcionar sem ser controlado por um tutorial. Muitíssimo obrigado!
glendon
2

Se você estiver enviando uma nova imagem privada pela primeira vez, certifique-se de que sua assinatura seja compatível com essa imagem extra.

O Docker permite que você tenha 6 imagens privadas nomeadas, mesmo se você pagar apenas por 5, mas não para enviar a 6ª imagem. A falta de uma mensagem informativa é confusa e irritante.

user1114056
fonte
2

Aqui está a solução para o meu caso (repositórios privados, plano de conta grátis)

https://success.docker.com/Datacenter/Solve/Getting_%22unauthorized%3A_authentication_required%22_when_trying_to_push_image_to_DTR

O nome da compilação da imagem a enviar deve ter o mesmo nome dos repositórios.

Exemplo: repos no hub docker é: accountName / resposName nome de compilação de imagem "accountName / resposName" -> docker build -t accountName / resposName

em seguida, digite docker push accountName / resposName: mais recente

Isso é tudo.

netz75
fonte
O link está quebrado. Por favor, corrija.
Eric Bolinger
1

O que funcionou para mim foi criar um novo repositório e renomear a imagem com

$ docker tag image_id myname/server:latest

Irene Giakoumi
fonte
1

Certifique-se de ter mais slots para imagens privadas.

No meu caso, eu converti um usuário em uma organização e ele perdeu uma imagem privada gratuita, então push anteriores que funcionaram, não funcionaram mais.

Alex Soto
fonte
1

Meu problema era um token de autorização inválido após 5 minutos. O envio demorou mais de 5 minutos devido ao tamanho da imagem.

Eu corrigi isso aumentando a "Duração do token de autorização" para 10 minutos.

insira a descrição da imagem aqui

Manuel Schmitzberger
fonte
Onde você encontrou essa configuração? Não consegui encontrar.
Vic Seedoubleyew
2
Meu hack para evitar esse problema era rodar docker loginem outra janela de terminal pouco antes de terminar o upload
Vic Seedoubleyew
@VicSeedoubleyew Admin Area -> Settings -> CI/CD -> Container Registry. caminho url: /admin/application_settings/ci_cd.
Manuel Schmitzberger
Obrigado pela resposta. Área administrativa de quê? Não vejo nada disso no dockerhub
Vic Seedoubleyew de
Isso é para uma instância própria do gitlab. Não tenho certeza se você pode configurar isso no dockerhub.
Manuel Schmitzberger
0

Certifique-se de que o nome do repositório docker corresponda ao nome do repositório docker local. por exemplo, digamos que seu nome de repositório local "kavashgar / nodjsapp"

então você também deve ter um nome de repo "kavashgar" no hub do docker

smakintel.com
fonte
0

em seu arquivo de configuração ~ / .docker / config.json add

{
        "auths": {
             "https://index.docker.io/v1/": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "[email protected]"
                }
        }
}

onde XXXXX é a codificação base64 do seu nome de usuário: senha (o: está incluído) de https://hub.docker.com

no meu caso tive o mesmo erro com um pull. o problema (no Windows) foi provocado pelo processo de execução do docker duplo, então um mate todos e reinicie um serviço e ele funciona.

Badr Bellaj
fonte
0

Já houve boas respostas, mas eu gostaria de mencionar uma - você NÃO precisa criar um repositório com antecedência antes de enviá-lo.

O problema para mim é que não configurei o nome de usuário correto da conta na qual fiz login. Mas uma vez que o nome de usuário correto é definido antes da imagem (por exemplo YOURNAME/YOURIMAGE) por meio de sua tag, você pode enviá-lo sem criar um novo repositório com antecedência.

sudo docker tag IMAGE:VERSION USERNAME/IMAGE:VERSION
sudo docker push USERNAME/IMAGE:VERSION
Blaszard
fonte
0

O mesmo problema aqui, durante o envio da imagem:

unauthorized: authentication required

O que eu fiz:

docker login --username=yourhubusername [email protected]

Que imprimiu:

--email está obsoleto (mas o login teve sucesso ainda)

Solução: use a sintaxe de login mais recente.

docker login

Ele solicitará o nome de usuário e a senha interativamente. Então, o push de imagem simplesmente funciona.

Mesmo depois de usar a nova sintaxe, meu ~/.docker/config.jsonfica assim depois de logado:

{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}

Portanto, a credencial está nas chaves do macOS.

Jing Li
fonte
0

Recebi um erro semelhante para sudo docker push / sudo docker pull no repositório ecr. Isso ocorre porque aws cli instalado em meu usuário (abc) e docker instalado em usuário root. Tentei executar sudo docker push em meu usuário (abc)

Corrigido isso instalando o aws cli na raiz, configurando o aws usando o aws configure na raiz e executando sudo docker push para ecr no usuário root

sathish g
fonte
0

Experimente docker logoutprimeiro, depois volte a iniciar comdocker login

Rohman Masyhar
fonte
0

Você pode carregar o arquivo xxx / .docker / config.json em algum lugar para manipulá-lo. Em seguida, tente fazer o login novamente para criar o novo arquivo config.json.

#mv xx/.docker/config.json xx/.docker/config_old.json
#docker login https://index.docker.io/v1/
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: YOUR USERNAME
Password: YOUR PASSWORD
WARNING! Your password will be stored unencrypted in /xxx/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
Seylul
fonte
0

Se você está correndo windows 7 docker Registry

  1. Inicie a **Docker Quick Start terminal**execução (este terminal permite a conexão) Até que você envie as imagens, isso manterá o token ativo.
  2. Conecte-se docker login
  3. Certifique-se de marcar a imagem com o nome de usuário

    docker build -f Dockerfile -t 'username'/imagename

  4. empurrar imagem

    docker image push username/imagename

Nota : o nome da imagem está todo em letras minúsculas

Dapper Dan
fonte
0

Eu tive um problema parecido.

Error response from daemon: Get https://registry-1.docker.io/v2/hadolint/hadolint/manifests/latest: unauthorized: incorrect username or password

Eu descobri que mesmo se eu logar com sucesso com o docker logincomando, qualquer pull falhou. Tentei limpar, ~/.docker/config.jsonmas nada melhorou.

Olhando no arquivo de configuração, vi que as credenciais não foram salvas lá, mas em a "credsStore": "secretservice". No Linux, isso é a ferramenta seahorseou Passwords and Keys. Eu verifiquei lá e limpei todo o login do hub do docker. Depois disso, um novo login do docker funcionou conforme o esperado.

Alex
fonte