无法登录Docker账户。

173
OS: Ubuntu 18.04 Server
Docker 18.3 CE

我已通过PuTTY SSH会话从我的Windows 10笔记本电脑登录服务器。

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

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

但是,当我尝试将我的镜像保存到Docker Hub时,在尝试使用以下命令登录时出现问题:

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 文件夹。有什么想法吗?


今天我在LXD/LXC容器中尝试运行docker login命令时遇到了一个类似的问题。我通过将主机上的.docker/config.json复制到手动创建的LXD/LXC容器内的$HOME/.docker/目录中来解决它。目前,我正在尝试解决另一个问题,并想问一下您是否已经尝试过这样做? - code_dredd
不,我有点放弃了Windows。明天我会得到一台新的笔记本电脑,在那里我将安装Ubuntu 18作为双重启动系统。 - EastsideDev
我已经在这里 https://github.com/docker/cli/issues/1136 上开了一个问题。如果他们找到了解决方案,我会在这里发布。 - thishandp7
23个回答

323

编辑于2019-04-07:

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

sudo apt install 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 和 pass(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 is initialized”。

5.6) docker-credential-pass list

6) 创建一个 ~/.docker/config.json 文件,其中包含:

{
"credsStore": "pass"
}

7) docker登录现在应该可以使用了

注意:如果您在未来的运行中遇到“pass store未初始化”错误,请运行以下命令(它将重新加载内存中的pass store):

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

它将要求您输入密码并初始化通行证存储。

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


1
对我没有用。当我尝试docker login时,我得到了这个消息: “获取凭据时出错 - 错误:退出状态1,输出:`pass存储未初始化”。 - GlacialSpoon
3
@Jean-Phillipe Jodoin,谢谢。看来我必须定期调用此函数,否则登录调用将找不到凭据。我读到这可能与gpg缓存过期有关,“pass show”会唤醒它。当服务器重新启动时,我必须返回“pass insert”步骤才能使事情正常工作。虽然不是很方便,但它确实让我可以继续进行。 - GlacialSpoon
2
请查看下面 Anish Varghese 的答案,它似乎是最简单和最干净的解决方案。 - Aurelien
由于下面的答案,这个实际上是有害的。它实际上会使下面的那个无法正常工作。我觉得告诉人们首先尝试下面的答案是一个好的网络公民行为。 - Joe Phillips
1
@JoePhillips:同意你的观点。已经引用了他的解决方案。 - Jean-Philippe Jodoin
显示剩余6条评论

296

在Ubuntu上安装以下软件包解决了我的问题。

sudo apt install gnupg2 pass

5
安装pass没有成功,但安装gpg2后就可以了:"sudo apt install gnupg2 pass gpg"。 - Jörg Beyer
6
在Ubuntu 18.04上对我也起作用。我只输入了 sudo apt install pass,其余部分是由它的依赖关系自动安装的。 - Álex
4
在Ubuntu 18.04上对我起作用了。 - Gill Bates
16
问题的根源是什么?为什么使用“gnupg2 pass”会解决问题? - Phoenix
1
谢谢!在Debian 10上对我有用。 - ASten
显示剩余6条评论

54

我在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 首先,docker默认在OS-X中的gnome key-chain和osx-keychain中搜索“pass”。如果没有找到,则会查找org.freedesktop.secrets。在ubuntu 18中未找到它(存在一些问题)。将其重命名为其他名称(docker-credential-secretservice)后,它会回退并自行创建配置文件,您可以在home/.docker文件夹中查看已创建的config.json文件。 - bak2trak
1
我刚遇到了这个问题,并通过以下方法解决了它 - 有点。我从 GH 安装了 docker-credential-secretservice,创建了一个内容为上述的 ~/.docker/config.json,然后尝试登录。但是出现了错误。然后删除了 .docker 文件夹、config.json/usr/bin/docker-credential-secretservice 可执行文件,然后再次运行 docker login 成功了。 - Andy
2
对于遇到同样问题的人:不要忘记删除config.json文件。我差点放弃了,但在删除config.json文件后,最后一刻它起作用了。 - sr9yar
2
对我来说,我卸载了 docker-compose 然后运行了你的 sudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_x 重命名命令,它起作用了。有人知道 docker-credential-secretservice 用于什么吗? - WSBT
1
这个解决方案对我有用,但它将凭据保存为 base64 编码。我在下面发布了一个使用 pass 的解决方案。 https://dev59.com/sFUL5IYBdhLWcg3wk4vK#52881198 - Jean-Philippe Jodoin
显示剩余3条评论

18

在我的Ubuntu 18中,这对我有用:

docker logout
mv ~/.docker/config.json ~/.docker/config_old.json
docker login

在 MacOS BigSur 上也可以工作。 - pavle
2
在Ubuntu 22.04中工作过。 - Laode Muhammad Al Fatih
在Ubuntu 18.04上工作 - Reuben
在Ubuntu 20.04上工作过。 - undefined

10

我刚刚删除了~/.docker/config.json文件,然后再次尝试登录。成功了。一个新文件被创建。


我在这个帖子里尝试了所有其他方法,唯一有效的是这一个。 - ruby_newbie

10

这也许对你有所帮助,至少在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/

这里有一篇文章介绍如何消除Docker明文凭据的问题。

如果你想要获得最新的docker-credential-helpers版本,可以从这里下载。


7

我遇到了这个问题 (在升级自16,18版本的headless Ubuntu 20上),但其他答案对我都不起作用。最终,在阅读了这里发布的一些讨论后,我发现问题是由于 安装了 gnome-keyring ,但无法正常工作。由于这是一个无头服务器,正确的答案是删除 gnome-keyring(因为它提供了org.freedesktop.secrets服务),然后它就完美地工作了。

sudo apt remove gnome-keyring golang-docker-credential-helpers

谢谢。移除 gnome-keyring 就足够了 - 移除 golang-docker-credential-helpers 将意味着也要移除 docker-compose。 - Michael2

7
如果 apt install gnupg2 pass 不能正常使用,你也可以安装 golang-docker-credential-helpers 软件包。

6
对我来说最简单的解决方案是在用户主目录下的.docker目录中创建config.json文件:
/home/.docker/config.json
然后,我从能够登录到Docker Hub的服务器上复制了此文件的内容。
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "SOMEVALUE"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }

}

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


遗憾的是,这是我唯一有效的解决方法... 至少可以使用访问令牌而不是您账户的密码。 - George Aristy
路径“/home/.docker/config.json”似乎是错误的。你可能想说的是“/.docker/config.json”。 - BlakBat
感谢指出,已更新路径。 - Mr Kashyap

5
简单解决方案:只需从~/.docker/config.json中删除"credsStore": "secretservice"即可。

2
这是一个危险的解决方案,因为密码以未加密的方式存储。 - PenguinEngineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接