【发布时间】:2018-05-26 14:30:13
【问题描述】:
我想在构建/docker 推送时对 docker 镜像(最新 + 版本,例如 1.3.0-78)进行双重标记。
然后我想将我的所有应用程序部署到具有最新标签的 kubernetes,如果测试通过,然后从我可以从与“最新”相关联的 kubernetes 获得的图像摘要中查找“真实”标签(1.3.0-78) ",然后创建一个包含所有 docker 标签的清单作为候选发布版。
不幸的是,我还没有找到仅基于摘要找到“真实”标签的好方法。
看来您必须迭代整个存储库中的所有标签并寻找匹配的摘要。鉴于特定图像可能有数百或数千个标签,这可能需要很长时间。
这是一个脚本,它可以找到所有具有相同摘要的标签,但速度很慢:
REPOSITORY=$1
TARGET_TAG=$2
# find all tags
ALL_TAGS=$(curl -s $REPOSITORY/tags/list | jq -r .tags[])
# get image digest for target
TARGET_DIGEST=$(curl -s -D - -H "Accept: application/vnd.docker.distribution.manifest.v2+json" $REPOSITORY/manifests/$TARGET_TAG | grep Docker-Content-Digest | cut -d ' ' -f 2)
# for each tags
for tag in ${ALL_TAGS[@]}; do
echo "checking tag ${tag}"
# get image digest
digest=$(curl -s -D - -H "Accept: application/vnd.docker.distribution.manifest.v2+json" $REPOSITORY/manifests/$tag | grep Docker-Content-Digest | cut -d ' ' -f 2)
# check digest
if [[ $TARGET_DIGEST = $digest ]]; then
echo "$tag $digest"
fi
done
有人有其他方法吗?
【问题讨论】:
-
看起来您一定已经根据您的代码找到了这个问题,但对于其他人搜索,此处显示了将摘要映射到标签的更完整示例stackoverflow.com/questions/41808763/…
-
此外,您可以通过对
ALL_TAGS应用正则表达式过滤器来加快该代码的速度,以便仅检索可能匹配的标签的摘要。
标签: docker kubernetes