我有一个系统,想要运行docker login
命令。这是一个无头Linux系统,但不幸的是只安装了Docker凭据助手 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上的“pass”。一个特殊情况是,在Linux上,如果找不到“pass”二进制文件,Docker将回退到“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
,但如果不可能或者作为参考,是否还有其他解决方案?)
pass
与 docker 太过复杂且容易出错。 - user855443credStore
字段对我有用。在登录时删除credstore
后,它显示了警告并将授权令牌保存为base64格式的配置文件中。只是一个建议:使用docker --config
选项在除实际~/.docker/config.json
之外的某些位置使用配置文件,可以更轻松地执行这些混乱的操作,而不必担心弄坏实际的配置文件。 - George Pantazes