如何检查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
相关产品推荐
相关产品推荐

