【发布时间】:2022-11-17 09:35:40
【问题描述】:
这就是我在自定义 docker 注册表中获取图像的所有版本标签的方式:
r=`curl -sS "$registry/v2/" \
-o /dev/null \
-w '%{http_code}:%header{www-authenticate}'`
http_code=`echo "$r" | cut -d: -f1`
curl_args=(-sS -H 'Accept: application/vnd.docker.distribution.manifest.v2+json')
curl_args+=(-u "$creds")
tags=`curl "${curl_args[@]}" "$registry/v2/$image/tags/list" | jq -r .tags[] | sort -V`
结果可能是这样的:
1.0.0
1.1.2
1.2.0
1.2.1
1.0.1
1.1.0
1.1.1
1.2.1
现在我只想获取除最新的三个标签之外的所有标签,如果标签少于三个,则结果应该为空。所以在这个例子中我需要得到
1.0.0
1.0.1
1.1.0
1.1.1
1.1.2
我尝试使用 unset $tags[-3],但我想我没有得到最后一次 curl 调用返回的数组。那么sort -V是否可以使用这种语法?
【问题讨论】:
-
这回答了你的问题了吗? How to remove an array element with jq?
-
tags不是数组,它只是一个普通字符串变量(恰好包含多行,由换行符分隔)。