我看到~/.dockercfg
有您的登录凭据,但它是您的电子邮件,而不是您的用户名。我看到正在运行docker login
会显示您的用户名并提示您进行更改。但是,您可以将用户名添加到构建脚本中吗?
答案 0 :(得分:6)
显示用户名:
docker info | sed '/Username:/!d;s/.* //'
将其存储在变量中:
username=$(docker info | sed '/Username:/!d;s/.* //');
echo $username
请注意,如果您有bash history expansion(set +H
),则无法在command substitution周围添加双引号(例如"$(cmd...)"
,因为!
获取用你的上一个命令替换。使用这些嵌套扩展进行转义是非常棘手的,如上所示使用它不加引号更具可读性和效果。
答案 1 :(得分:1)
似乎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))"
当然有更好的东西。