我有一个试图运行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
,但是,如果不可能或不作参考,是否有其他解决方法?)
答案 0 :(得分:1)
不幸的是,Docker(自18.06起)首先寻找docker-credential-*
二进制文件,如果找到其中任何一个,它将自动覆盖"credsStore"
中的~/.docker/config.json
值。
您唯一的解决方法是将docker-credential-pass
安装在您的主目录中,以便Docker将使用它代替docker-credential-secretservice
。 docker-credential-pass
不需要GUI。
安装docker-credential-pass
的步骤:
答案 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>