如何通过Shell脚本判断Docker用户是否已完成登录
Shell脚本判断Docker用户登录状态的实现方案
判断Docker配置中auths字段是否为空,最可靠的方式是借助JSON处理工具jq实现,具体方案如下:
前置准备:安装jq
jq是Shell环境下的轻量JSON处理工具,不同系统安装命令:
- Debian/Ubuntu系:
sudo apt install jq - RHEL/CentOS系:
sudo yum install jq - macOS:
brew install jq
核心判断逻辑
通过jq读取auths字段的键数量:数量为0代表未登录,大于0代表已登录(即使授权信息存储在外部凭据管理器credsStore中,登录后auths下也会保留对应镜像仓库的键,和你给出的配置示例特征完全匹配)
完整脚本示例
#!/bin/bash # 你已经存入变量的配置内容可以直接复用 docker_login_info=$(cat ~/.docker/config.json 2>/dev/null) # 先处理配置文件不存在的异常场景 if [ -z "$docker_login_info" ]; then echo "未找到Docker配置文件,用户未登录" exit 1 fi # 计算auths字段下的键数量 auth_count=$(echo "$docker_login_info" | jq '.auths | length') if [ "$auth_count" -eq 0 ]; then echo "用户未登录Docker" # 此处可添加未登录时的业务逻辑 else echo "用户已登录Docker" # 此处可添加已登录时的业务逻辑 fi
无jq环境的应急方案(不推荐)
如果环境无法安装jq,可以用正则匹配的方式判断,缺点是JSON格式化规则变化时可能出现判断误差:
if echo "$docker_login_info" | grep -q '"auths":\s*{\s*}'; then echo "用户未登录Docker" else echo "用户已登录Docker" fi
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

