15

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

4

3 回答 3

13

显示用户名:

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

将其存储在一个变量中:

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

请注意,如果您有 bash历史扩展( set +H),您将无法在命令替换周围加上双引号(例如"$(cmd...)",因为!被您的最后一个命令替换。使用这些嵌套扩展进行转义非常棘手,并且如上所示使用不带引号的它更具可读性和作品。

于 2016-08-12T22:20:25.747 回答
8

现代 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
于 2019-11-11T03:30:48.060 回答
0

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

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

当然还有更好的东西。

于 2015-03-29T07:32:21.277 回答