有没有办法获得当前用户的Docker Hub用户名?

Bru*_*sky 9 docker dockerhub

我看到它~/.dockercfg有您的登录凭据,但它是您的电子邮件,而不是您的用户名.我看到运行docker login显示您的用户名并提示您更改它.但是,您可以将用户名添加到构建脚本中吗?

Bru*_*sky 16

现代 Docker 的更新。

似乎docker info不再包含用户名。相反,我学会了通过 来从凭证存储中提取它jq。我没有在每个 上都尝试过这个credStore,但对于我在 macOS 和 Linux 上检查过的那些,这是有效的。

# line breaks added for readability; this also works as a oneliner
docker-credential-$(
  jq -r .credsStore ~/.docker/config.json
) list | jq -r '
  . |
    to_entries[] |
    select(
      .key | 
      contains("docker.io")
    ) |
    last(.value)
'
Run Code Online (Sandbox Code Playgroud)

[bonus] 显示您的凭证助手的全部内容

在这种情况下,我选择了 docker-credential-desktop,但它应该适用于任何。您可以从 Docker 配置中提取凭证助手,就像我在前面的代码块中所做的那样。

docker-credential-desktop list | \
    jq -r 'to_entries[].key'   | \
    while read; do
        docker-credential-desktop get <<<"$REPLY";
    done
Run Code Online (Sandbox Code Playgroud)

  • 哇,我刚刚看到了我的 Docker.io 密码的纯文本形式 (3认同)

Kev*_*ell 10

显示用户名:

docker info | sed '/Username:/!d;s/.* //'
Run Code Online (Sandbox Code Playgroud)

将其存储在变量中:

username=$(docker info | sed '/Username:/!d;s/.* //'); 
echo $username
Run Code Online (Sandbox Code Playgroud)

请注意,如果你有bash history expansion(set +H),你将无法在命令替换中加上双引号(例如,"$(cmd...)"因为!你的上一个命令被替换.使用这些嵌套扩展进行转义是非常棘手的,如上所示使用它不加引号更具可读性和工作.

  • 不适用于macOS - 登录后没有用户名 (10认同)
  • `docker info`不再显示用户名:( (3认同)