Chr*_*son 10 credentials docker
我有一个尝试运行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`
Run Code Online (Sandbox Code Playgroud)
我认为这是有道理的:
默认情况下,Docker 在每个平台上查找本机二进制文件,即 macOS 上的“osxkeychain”、Windows 上的“wincred”和 Linux 上的“pass”。一个特殊情况是,在 Linux 上,如果 Docker 找不到“pass”二进制文件,它将回退到“secretservice”二进制文件。如果这些二进制文件都不存在,它会将凭据(即密码)以 base64 编码存储在上述配置文件中。
由于secretservicehelper 使用 GUI 凭据存储,因此它会尝试打开一个窗口,而在无头系统上则无法打开该窗口。
我无法控制系统,因此我无法删除/usr/bin/docker-credential-secretservice文件以强制docker login回退到配置文件而不是使用secretservice帮助程序。
我可以做的是在用户的主文件夹中创建和列出文件。我试过这样运行命令:
docker --config ./docker login -u <user-name> -p <password> <repository>
Run Code Online (Sandbox Code Playgroud)
我的印象是登录命令会config.json在 ./docker 中创建一个(我注意到docker login如果文件夹不存在会创建它)。这适用于没有安装任何帮助程序的系统,但不适用于相关系统。
我还尝试使用以下内容创建一个~/.docker/config.json:
echo '{"credStore":""}' > ~/.docker/config.json
Run Code Online (Sandbox Code Playgroud)
希望这docker login会得到提示,不要为凭证存储使用任何帮助程序。
有没有办法让非管理员强制docker login回退到:
将凭据(即密码)以 base64 编码存储在上述配置文件中。不删除凭据助手?
(作为旁注,我当然会要求/usr/bin/docker-credential-secretservice删除,但如果不可能或供将来参考,是否有其他解决方案?)
小智 20
在使用不同的用户名登录之前注销当前用户对我有用。注销会删除保存的 docker 凭据。
docker logout <reponame>
docker login <reponame>
Run Code Online (Sandbox Code Playgroud)
不幸的是,Docker(从 18.06 开始)首先查找docker-credential-*二进制文件,如果找到其中任何一个,它将自动"credsStore"覆盖~/.docker/config.json.
您唯一的解决方法是安装docker-credential-pass在您的主目录中,以便 Docker 将使用它而不是docker-credential-secretservice. docker-credential-pass不需要 GUI。
安装步骤docker-credential-pass:
小智 6
为避免credsStore在 docker 配置中使用and 存储纯文本身份验证令牌(例如~/.docker/config.json),请"credsStore"从 docker 配置文件中删除密钥并重新运行docker login.
运行时docker login,它会发出警告,但会将身份验证令牌保存到文件中。
$ docker login
Username: someuser
Password:
WARNING! Your password will be stored unencrypted in ~/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Run Code Online (Sandbox Code Playgroud)
生成的 docker 配置文件应如下所示:
{
"auths": {
"your.docker.registry": {
"auth": "dXNlcm5hbWU6cGFzc3dvcmQK="
}
}
}
Run Code Online (Sandbox Code Playgroud)
该auth令牌是简单形式的base64编码的字符串username:password。
这适用于 Docker Engine 版本 19 和 20。
| 归档时间: |
|
| 查看次数: |
8550 次 |
| 最近记录: |