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

Is there a way to get the Docker Hub username of the current user?

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

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

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

肯定有更好的。

显示用户名:

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

将其存储在一个变量中:

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

请注意,如果您有 bash history expansion (set +H) you will be unable to put double quotes around the command substitution(例如 "$(cmd...)",因为 ! 会被您的最后一个命令替换。使用这些嵌套扩展和使用转义非常棘手如上所示未加引号的代码更具可读性和工作性。

现代 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