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

时间:2015-03-29 07:32:21

标签: docker dockerhub

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

3 个答案:

答案 0 :(得分:6)

显示用户名:

docker info | sed '/Username:/!d;s/.* //'

将其存储在变量中:

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

请注意,如果您有bash history expansionset +H),则无法在command substitution周围添加双引号(例如"$(cmd...)",因为!获取用你的上一个命令替换。使用这些嵌套扩展进行转义是非常棘手的,如上所示使用它不加引号更具可读性和效果。

答案 1 :(得分:1)

针对现代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)
'

[奖励]显示您的凭据帮助程序的全部内容

在这种情况下,我已经选择了docker-credential-desktop,但是它可以与任何平台一起使用。您可以像上一个代码块中那样从Docker配置中提取凭证帮助程序。

docker-credential-desktop list | \
    jq -r 'to_entries[].key'   | \
    while read; do
        docker-credential-desktop get <<<"$REPLY";
    done

答案 2 :(得分:0)

这可以提取它,但从技术上讲,它是一种竞争条件。

username="$(sed 's/.*(//;s/).*//' <(docker login & sleep 1; kill %1))"

当然有更好的东西。