无法登录Docker帐户


109
OS: Ubuntu 18.04 Server
Docker 18.3 CE

我使用PuTTY SSH会话从Windows 10笔记本电脑登录到服务器。

我的本地Windows笔记本电脑上没有Docker,因此所有工作都在远程服务器上完成。

我可以使用终端会话在远程服务器上执行所有Docker命令。

但是,当我尝试将映像保存到Docker集线器时,尝试登录时,请使用:

docker login

我收到以下错误消息:

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`

在远程服务器上创建映像时,没有收到任何错误消息。

我也没有在远程服务器的相关主目录中看到.docker文件夹。有任何想法吗?


今天,当我尝试docker login从LXD / LXC容器中运行时遇到了一个类似的问题。我通过将.docker/config.json主机从复制到我$HOME/.docker/手动创建的LXD / LXC容器中的目录中解决了这一问题。我目前正在尝试找出另一个问题,但想问一下您是否尝试过这样做?
–'code_dredd

不,我有点放弃Windows。明天我要买一台新笔记本电脑,在那里我将以双引导方式安装Ubuntu 18。
EastsideDev

我在这里github.com/docker/cli/issues/1136为此打开了一个问题。如果他们找到解决方案,我将在此处发布。
thishandp7

Answers:


195

编辑2019-04-07:

由于这是当前选择的答案,我认为人们应该首先尝试以下@Anish Varghese解决方案,因为这似乎是最简单的方法。您只需要安装gnupg2并通过软件包:

sudo apt安装gnupg2 pass

如果它不起作用,那么您可以在这里尝试我的原始解决方案:

我遇到过同样的问题。bak2trak答案有效,但是它以明文形式保存凭据。如果您要将它们保留在密码存储区中,这是解决方案。

1)从https://github.com/docker/docker-credential-helpers/releases下载docker-credential-pass

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

3) chmod u+x docker-credential-pass

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

5)您将需要设置docker-credential-pass(以下步骤基于https://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388634452

5.1)安装gpg并传递(apt-get install gpg pass

5.2)gpg --generate-key,输入您的信息。您应该会看到以下内容:

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

复制123 ...行

5.3)pass init 1234567890ABCDEF1234567890ABCDEF12345678(粘贴)

5.4)pass insert docker-credential-helpers/docker-pass-initialized-check并设置下一个密码“ pass is initialized”(不带引号)。

5.5)pass show docker-credential-helpers/docker-pass-initialized-check。您应该看到pass已初始化。

5.6) docker-credential-pass list

6)使用以下命令创建〜/ .docker / config.json:

{
"credsStore": "pass"
}

7)docker登录现在应该可以工作了

注意:如果在以后的运行中出现错误“通行证存储未初始化”,请运行以下命令(它将在内存中重新加载通行证存储):

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

它将询问您的密码,并将初始化通行证存储。

这是基于以下讨论:https : //github.com/moby/moby/issues/25169#issuecomment-431129898


没为我工作。我在尝试docker登录时收到消息:“获取凭据时出错-错误:退出状态1,退出:`通行证存储未初始化”
GlacialSpoon

卸载pass并删除.password-store文件夹后,我再次开始。现在看起来更好。谢谢。
GlacialSpoon

1
@ Jean-Phillipe Jodoin,谢谢。看来我必须定期调用此命令,否则登录调用将找不到凭据。我读到这可能与gpg缓存过期有关,而“ pass show”将其唤醒。服务器重启后,我必须回到“ pass insert”步骤,然后一切正常。这不是很方便,但是允许我继续。
GlacialSpoon

1
在下面查看Anish Varghese的答案,它似乎是最简单,最干净的解决方案。
Aurelien

1
@JoePhillips:同意你的看法。将他的解决方案与引用结合在一起。
Jean-Philippe Jodoin

200

在ubuntu中安装以下软件包可以解决我的问题

sudo apt install gnupg2 pass

没有工作的我,还安装GPG工作:“sudo易于安装gnupg2通GPG”
约尔格·拜尔

6
也为我在ubuntu 18.04上工作。我只发行sudo apt install pass外,其余之际,它的依赖
亚历克斯

4
在Unbuntu 18.04上为我工作。
Gill Bates

5
问题的根源是什么?为什么gnupg2 pass要解决此问题?
天降

1
为我工作在Ubuntu的19.04太
Ammad哈立德

41

我在ubuntu 18.08中遇到了同样的问题,这最终对我有用..作为一种临时解决方案。

我创建了此文件夹,home/.docker/因为一些解决方案建议我创建一个文件config.json并在其中写入默认凭据,即

{
    "credsStore": "pass"
}
  • 我删除了这个文件config.json
  • 然后将docker-credential-secretservice重命名为其他名称,以便它不会拾取该文件。

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

而且有效!


2
@Renrhaf首先搬运工人在默认情况下会寻找“通行证”在那里搜索在GNOME钥匙扣和OSX,钥匙扣在OS-X。如果找不到,则寻找org.freedesktop.secrets。找不到ubuntu 18(一些问题)。将其重命名为(docker-credential-secretservice)之后,它会自行创建配置文件,您可以在home / .docker文件夹中查找一个已经创建的config.json文件。
bak2trak

我只是遇到了这个问题,并通过这种方法解决了-一种。我docker-credential-secretservice从GH 安装,创建了一个~/.docker/config.json如上内容,然后尝试登录。出现了错误。然后删除该.docker文件夹,config.json/usr/bin/docker-credential-secretservice可执行文件,然后运行docker login成功一次
安迪

1
对于有相同问题的任何人:不要忘记删除config.json。我几乎放弃了这一点,但是在删除config.json之后的最后一刻,它起作用了。
sr9yar

2
对我来说,我先卸载docker-compose后再运行您的sudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_x重命名即可。有人知道这docker-credential-secretservice是用来干什么的吗?
user1032613

1
该解决方案对我有用,但是它保存了基于64位编码的凭据。我在下面发布了一个使用通行证的解决方案。stackoverflow.com/questions/50151833/...
让-菲利普·Jodoin

4

如果apt install gnupg2 pass对您不起作用,您还可以安装golang-docker-credential-helpers软件包


4

这可能也有帮助,至少在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

对我来说docker push失败了

denied: requested access to the resource is denied

...所以我想docker login输入凭证后得到以下信息:

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

幸运的是,我还有另一台可用的计算机可以登录而无需对系统进行任何更改。我复制了~/.docker/config.json... 的内容

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

...到另一台机器上docker push工作。


1

对我来说,最简单的解决方案是在用户主目录下的.docker目录下创建config.json文件:

/home/.docker/config.json

然后,我从服务器上复制了该文件的内容,并从该服务器登录到Docker集线器。

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

}

这是一个简单的解决方法,因为它不需要您安装或更新我们在生产服务器上不容易完成的任何软件包。


遗憾的是,这是唯一对我有用的解决方法...至少可以使用访问令牌代替您帐户的密码。
乔治·阿里斯蒂

路径“〜/ home / .docker / config.json”似乎太错误了。您可能的意思是“〜/ .docker / config.json”
BlakBat

感谢您初始化它,更新了路径。
Kashyap先生

0

好了,您已经阅读了解决方案,但事实是gnupg2现在默认情况下未在Ubuntu 18+中安装,这就是之后的某个时候apt upgrade,事情表现有所不同的原因。


0

在回答之后,我遇到了几个问题。

  1. 密钥生成停留在熵上(步骤5.2)。

幸运的是,此修复很容易,您只需要安装软件包即可rng-toolshttps : //stackoverflow.com/a/32941065

  1. pass init <key>(步骤5.3)上gpg: decryption failed: No secret key显示错误。

实际上,此问题是由于秘密密钥仅限于根特权。

我更改了.gnupg .password-store用户主目录中文件夹的所有权。

然后重新加载dirmngr,以避免出现“所有权不安全”警告:

gpgconf --kill dirmngr

如果您不想执行所有操作,则可以以root / sudo身份运行所有答案命令。


0

创建以下内容为我解决了问题:

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

0

简单的解决方案:只需"credsStore": "secretservice"从〜/ .docker / config.json中删除


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.