如何强制“ docker login”命令忽略现有的凭据帮助程序?

时间:2019-03-15 17:35:02

标签: docker credentials

我有一个试图运行docker login命令的系统,它是一个无头的linux系统,但是不幸的是,仅安装了Docker Credentials Helper docker-credential-secretservice。

这意味着我收到以下错误:

Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`

我理解为:

  

默认情况下,Docker在每个   平台,即macOS上的“ osxkeychain”,Windows上的“ wincred”和   在Linux上“通过”。 一种特殊情况是,在Linux上,Docker将掉线   如果找不到“ pass”,则返回“ secretservice”二进制文件   二进制。如果这些二进制文件都不存在,它将存储   配置文件中base64编码的凭据(即密码)   如上所述。

由于secretservice助手使用GUI凭据存储,因此它尝试打开一个无头系统无法打开的窗口。

我无法控制系统,因此无法删除/usr/bin/docker-credential-secretservice文件来迫使docker login退回到配置文件,而不是使用secretservice帮助程序。

我能做的是在用户的主文件夹中创建和列出文件。我试图这样运行命令:

docker --config ./docker login -u <user-name> -p <password> <repository>

给我的印象是,登录命令随后将在./docker中创建一个config.json(我发现docker login将创建该文件夹(如果不存在))。此方法适用于未安装任何帮助程序的系统,但不适用于有问题的系统。

我还尝试创建一个类似以下内容的~/.docker/config.json

echo '{"credStore":""}' > ~/.docker/config.json

希望docker login会提示不为凭证存储使用任何帮助程序。

非管理员是否可以强制docker login退回至以下位置:

  

将凭据(即密码)以base64编码存储在上述配置文件中。   不用删除凭据助手吗?

(作为附带说明,我当然会要求删除/usr/bin/docker-credential-secretservice,但是,如果不可能或不作参考,是否有其他解决方法?)

4 个答案:

答案 0 :(得分:1)

不幸的是,Docker(自18.06起)首先寻找docker-credential-*二进制文件,如果找到其中任何一个,它将自动覆盖"credsStore"中的~/.docker/config.json值。

您唯一的解决方法是将docker-credential-pass安装在您的主目录中,以便Docker将使用它代替docker-credential-secretservicedocker-credential-pass不需要GUI。

安装docker-credential-pass的步骤:

docker login fails on a server with no X11 installed

答案 1 :(得分:0)

我也有这个问题;我通过从〜/ .docker / config.json中删除public static decimal? SumOrDefault<T>(this IQueryable<T> @this, Expression<Func<T, decimal>> selector) public static double? SumOrDefault<T>(this IQueryable<T> @this, Expression<Func<T, double>> selector) //etc. 键来修复它。下次我运行"credsStore"时,它给了我警告,但将auth令牌保存到了该文件中。

这是我的docker版本:

docker login

答案 2 :(得分:0)

您可以通过将所有内容发送到/dev/null来忽略所有输出,例如:

echo $TOKEN|docker login -u=user --password-stdin myregistry.com > /dev/null 2>&1
其中$TOKEN是您先前导出的令牌或密码。

这对于使用某些自动化的CI也很有用

答案 3 :(得分:0)

在使用不同的用户名登录之前注销当前用户对我有用。注销删除了保存的 docker 凭据。

docker logout <reponame> 
docker login <reponame>