You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查Docker客户端是否已成功登录Amazon ECR?

如何判断Docker客户端是否已登录AWS ECR?

我目前使用以下命令完成Docker客户端与ECR注册表的认证:

aws ecr get-login-password --region 'us-east-1' | \
docker login --username AWS --password-stdin <my-aws-acct-id>.dkr.ecr.us-east-1.amazonaws.com

我想找到能判断Docker客户端是否已登录ECR的命令,尝试过docker info但无法判断登录状态,原本期望在Shell脚本中使用类似以下的逻辑(但当前无效):

if docker info | grep -q "<my-aws-acct-id>.dkr.ecr.us-east-1.amazonaws.com"; then
     echo "Already logged in to ECR ✅"
else
     echo "Not logged in to ECR"
fi

可行的解决方案

Docker的登录状态信息存储在本地配置文件中,也可以通过模拟登录验证有效性,以下是几种实用方法:

方法1:检查Docker本地配置文件

Docker会把已登录的注册表信息存在~/.docker/config.json(普通用户)或/root/.docker/config.json(root用户)中,直接检查该文件是否包含目标ECR地址:

ECR_REGISTRY="<my-aws-acct-id>.dkr.ecr.us-east-1.amazonaws.com"
if grep -q "$ECR_REGISTRY" ~/.docker/config.json; then
    echo "已登录ECR ✅"
else
    echo "未登录ECR"
fi

方法2:模拟登录验证有效性

上面的方法只能检查配置文件是否有记录,无法判断令牌是否过期。用空密码尝试登录,根据返回码判断当前登录状态是否有效:

ECR_REGISTRY="<my-aws-acct-id>.dkr.ecr.us-east-1.amazonaws.com"
if echo "" | docker login --username AWS --password-stdin "$ECR_REGISTRY" >/dev/null 2>&1; then
    echo "已登录ECR ✅"
else
    echo "未登录ECR"
fi

这种方式会实际验证登录状态,即使配置文件有记录但令牌过期,也会返回"未登录"的结果,准确性更高。

方法3:用jq解析Docker系统信息

如果安装了jq工具,可以结构化解析docker system info的输出,判断目标ECR是否在已认证注册表列表中:

ECR_REGISTRY="<my-aws-acct-id>.dkr.ecr.us-east-1.amazonaws.com"
if docker system info --format '{{json .RegistryConfig.IndexConfigs}}' | jq -e "has(\"$ECR_REGISTRY\")" >/dev/null 2>&1; then
    echo "已登录ECR ✅"
else
    echo "未登录ECR"
fi

内容的提问来源于stack exchange,提问作者user19448827

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:57:25