Não é possível fazer login na conta Docker


110
OS: Ubuntu 18.04 Server
Docker 18.3 CE

Estou conectado ao servidor, a partir do meu laptop Windows 10, usando uma sessão PuTTY SSH.

Não tenho Docker no meu laptop Windows local, então todo o trabalho é feito no servidor remoto.

Posso executar todos os comandos do Docker, no servidor remoto, usando a sessão de terminal.

No entanto, quando tento salvar minha imagem no hub Docker, quando tento fazer o login, usando:

docker login

Eu recebi a seguinte mensagem de erro:

error getting credentials - err: exit status 1, out: `GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files`

Não recebi nenhuma mensagem de erro ao criar minha imagem no servidor remoto.

Também não vejo uma pasta .docker no diretório inicial relacionado no servidor remoto. Alguma ideia?


Eu me deparei com um problema semelhante hoje ao tentar executar docker loginde dentro de um contêiner LXD / LXC. Resolvi esse problema em particular copiando .docker/config.jsondo meu host para o meu $HOME/.docker/diretório dentro do contêiner LXD / LXC, que criei manualmente. No momento, estou tentando descobrir outro problema, mas gostaria de perguntar se você já tentou fazer isso?
code_dredd

Não, eu meio que desisti do Windows. Amanhã vou comprar um novo laptop, onde instalarei o Ubuntu 18 como dual boot.
EastsideDev

Abri um problema para isso aqui github.com/docker/cli/issues/1136 . Se encontrarem uma solução para isso, vou postar aqui.
thishandp7

Respostas:


195

Editar 07/04/2019:

Como esta é a resposta atualmente selecionada, acho que as pessoas deveriam tentar a solução @Anish Varghese abaixo primeiro, pois parece ser a mais fácil. Você só precisa instalar o gnupg2 e passar os pacotes:

sudo apt install gnupg2 pass

Se não funcionar, você pode tentar minha solução original aqui:

Eu tive o mesmo problema. A resposta do bak2trak funcionou, mas salvou as credenciais em texto não criptografado. Esta é a solução se você deseja mantê-los em um armazenamento de senhas.

1) Baixe docker-credential-pass em https://github.com/docker/docker-credential-helpers/releases

2) tar -xvf docker-credential-pass.tar.gz

3) chmod u+x docker-credential-pass

4) mv docker-credential-pass /usr/bin

5) Você precisará configurar docker-credential-pass (as etapas a seguir são baseadas em https://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388634452 )

5.1) instalar gpg e passar ( apt-get install gpg pass)

5.2) gpg --generate-key, insira suas informações. Você deve ver algo assim:

pub   rsa3072 2018-10-07 [SC] [expires: 2020-10-06]
      1234567890ABCDEF1234567890ABCDEF12345678

Copie a linha 123 ...

5.3) pass init 1234567890ABCDEF1234567890ABCDEF12345678(colar)

5.4) pass insert docker-credential-helpers/docker-pass-initialized-checke defina a próxima senha "pass is initialized" (sem aspas).

5.5) pass show docker-credential-helpers/docker-pass-initialized-check. Você deve ver que a passagem foi inicializada.

5,6) docker-credential-pass list

6) crie um ~ / .docker / config.json com:

{
"credsStore": "pass"
}

7) o login do docker agora deve funcionar

Observação: se você receber o erro "armazenamento de passagem não inicializado" em uma execução futura, execute o comando abaixo (ele recarregará o armazenamento de passagem na memória):

pass show docker-credential-helpers/docker-pass-initialized-check

Ele pedirá sua senha e inicializará o armazenamento de passes.

Isso é baseado nesta discussão: https://github.com/moby/moby/issues/25169#issuecomment-431129898


Não funcionou para mim. Recebo a mensagem quando tento o login do docker: "erro ao obter credenciais - err: status de saída 1, saída:` armazenamento de passagem não inicializado "
GlacialSpoon

Comecei novamente após desinstalar o pass e excluir a pasta .password-store. Parece melhor agora. Obrigado.
GlacialSpoon

1
@Jean-Phillipe Jodoin, obrigado. Parece que tenho que ligar para isso periodicamente, caso contrário, a chamada de login não consegue encontrar as credenciais. Eu li que isso pode ter algo a ver com o cache do gpg expirando e o "show de passagem" o desperta. Quando o servidor for reinicializado, tenho que voltar para a etapa "passar inserir" antes que as coisas funcionem. Não é muito conveniente, mas está me permitindo prosseguir.
GlacialSpoon

1
Verifique a resposta de Anish Varghese abaixo, parece ser a solução mais fácil e limpa.
Aurelien de

1
@JoePhillips: Concordo com você. Integrou sua solução com citação.
Jean-Philippe Jodoin

200

Instalar os seguintes pacotes no ubuntu corrigiu meu problema

sudo apt install gnupg2 pass

não funcionou para mim, mas também a instalação do gpg funcionou: "sudo apt install gnupg2 pass gpg"
Jörg Beyer

6
Funcionou para mim no ubuntu 18.04 também. Eu apenas emiti sudo apt install pass, o resto veio como suas dependências
Álex

4
Funcionou para mim no Unbuntu 18.04.
Gill Bates

5
Qual é a raiz do problema? e por que como gnupg2 passvai resolver o problema?
Skyfall

1
Funcionou para mim no ubuntu 19.04 também
Ammad Khalid

41

Enfrentei o mesmo problema no ubuntu 18.08 e isso finalmente funcionou para mim .. como uma solução temporária.

Eu criei esta pasta home/.docker/porque algumas soluções me sugeriram criar um arquivo config.jsone escrever as credenciais padrão nele, ou seja

{
    "credsStore": "pass"
}
  • Eu apaguei este arquivo config.json.
  • Em seguida, renomeou docker-credential-secretservice para outra coisa, para que ele não pegue o arquivo.

    sudo mv / usr / bin / docker-credential-secretservice / usr / bin / docker-credential-secretservice_x

e funcionou!


2
@Renrhaf O primeiro docker, por padrão, procura por "pass", onde procura em gnome key-chain e osx-keychain no OS-X. Se não for encontrado, procure org.freedesktop.secrets. Não foi encontrado para o Ubuntu 18 (alguns problemas). Depois de renomeá-lo (docker-credential-secretservice) para outra coisa, ele volta a criar o arquivo de configuração sozinho. Você pode procurar na pasta home / .docker um arquivo config.json que teria sido criado.
bak2trak

Acabei de encontrar esse problema e resolvi-o por meio deste método - mais ou menos. Eu instalei docker-credential-secretservicedo GH, criei um ~/.docker/config.jsoncom o conteúdo acima e tentei fazer o login. Ocorreu um erro. Em seguida, excluiu a .dockerpasta config.jsone o /usr/bin/docker-credential-secretserviceexecutável e foi executado docker loginnovamente com sucesso
Andy

1
Para qualquer pessoa com o mesmo problema: Não se esqueça de excluir config.json . Quase desisti, mas funcionou no último momento, depois que excluí o config.json.
sr9yar

2
Para mim, eu desinstalei docker-composee depois executei sua sudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_xrenomeação, funcionou. Alguém sabe para que docker-credential-secretserviceserve?
user1032613

1
Essa solução funcionou para mim, mas salva as credenciais codificadas com base em 64. Postei abaixo uma solução que usa passe. stackoverflow.com/questions/50151833/…
Jean-Philippe Jodoin

4

Se apt install gnupg2 pass não funcionar para você, você também pode instalar o pacote golang-docker-credential-helpers


4

Isso também pode ajudar, pelo menos ajudou no Ubuntu 20.04:

wget https://github.com/docker/docker-credential-helpers/releases/download/v0.6.3/docker-credential-secretservice-v0.6.3-amd64.tar.gz && tar -xf docker-credential-secretservice-v0.6.3-amd64.tar.gz && chmod +x docker-credential-secretservice && mv docker-credential-secretservice /usr/local/bin/

https://hackernoon.com/getting-rid-of-docker-plain-text-credentials-88309e07640d   https://github.com/docker/docker-credential-helpers/releases


2

Para mim docker pushfalhou com

denied: requested access to the resource is denied

... então eu queria, docker loginmas obtive o seguinte após inserir as credenciais:

Remote error from secret service:
  org.freedesktop.DBus.Error.UnknownMethod:
  No such interface 'org.freedesktop.Secret.Collection' on object at path
  /org/freedesktop/secrets/collection/login

Error saving credentials:
  error storing credentials - err: exit status 1, out:
  No such interface 'org.freedesktop.Secret.Collection' on object at path
  /org/freedesktop/secrets/collection/login

Felizmente, eu tinha outra máquina disponível na qual consegui fazer o login sem nenhuma alteração no sistema. Copiei o conteúdo de ~/.docker/config.json...

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "<some-hash-value>"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.2 (linux)"
        }
}

... para a outra máquina e docker pushfuncionou.


1

Para mim, a solução mais simples era criar o arquivo config.json no diretório .docker dentro do diretório inicial do usuário:

/home/.docker/config.json

Em seguida, copiei o conteúdo desse arquivo do servidor de onde consegui fazer login no hub do docker.

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "SOMEVALUE"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }

}

É uma solução fácil, porque não requer que você instale ou atualize nenhum pacote, o que não podemos fazer facilmente em servidores de produção.


Infelizmente, esta é a única solução alternativa que funcionou para mim ... pelo menos é possível usar um token de acesso em vez do pwd da sua conta.
George Aristy

O caminho "~ / home / .docker / config.json" parece tão errado. Você provavelmente quis dizer "~ / .docker / config.json"
BlakBat

Obrigado por apontar isso, atualizou o caminho.
Sr. Kashyap

0

Bem, você já leu a solução, mas o fato é que o gnupg2 agora não está instalado por padrão no Ubuntu 18+. Essa é a razão, algum tempo depois apt upgrade, as coisas se comportam de maneira um pouco diferente.


0

Seguindo a resposta, tive vários problemas.

  1. A geração de chaves estava presa na entropia (etapa 5.2).

Felizmente, a correção é fácil e você só precisa instalar o pacote rng-tools: https://stackoverflow.com/a/32941065

  1. No pass init <key>(passo 5.3) o erro gpg: decryption failed: No secret keyapareceu.

Na verdade, esse problema é devido à chave secreta ser restrita aos privilégios de root.

Eu mudei a propriedade do .gnupg .password-store pastas no diretório do meu usuário.

Em seguida, recarregou o dirmngr para evitar o aviso de "propriedade insegura":

gpgconf --kill dirmngr

Se você não quiser fazer tudo isso, você pode executar todos os comandos da resposta como root / sudo.


0

criar o seguinte resolveu para mim:

AWS_CONFIG=$AWS_DIR/config
AWS_CREDENTIALS=$AWS_DIR/credentials
mkdir -p $AWS_DIR

0

Solução simples: basta remover "credsStore": "secretservice"de ~ / .docker / config.json


-3

Instale os seguintes pacotes no ubuntu

sudo apt install gnupg2 pass

Isso funcionou para mim.


1
Isso não adiciona nenhuma resposta às respostas anteriores com o mesmo conteúdo ou melhor.
Karl Richter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.