2022年6月29日水曜日

【DockerHub】typo して間違った repository に push してしまった Docker image を正しい repository にコピーした

docker に push する先を typo してたまま CI 回しててしばらくずっと間違ったところに push してました。

oneapi が正しかったのに openapi ってなってました。
ここで今までビルドしたイメージを openapi から oneapi の方に移したいなと思ったのですが、これをやる場合 openapi から pull して oneapi に push するだけではあるのですが、すべてのタグでやるのはめんどくさかったのでスクリプトにしました。


#!/bin/bash
# usage: docker-cp-repo.sh src_repo dst_repo
set -euo pipefail
SRC_REPO=$1
DST_REPO=$2
SRC_TAGS=$(curl -s https://registry.hub.docker.com/v1/repositories/${SRC_REPO}/tags | jq -r '.[].name')
DST_TAGS=$(curl -s https://registry.hub.docker.com/v1/repositories/${DST_REPO}/tags | jq -r '.[].name')
ONE_SIDE_TAGS=$(echo -e "${SRC_TAGS}\n${DST_TAGS}" | sort | uniq -u)
SRC_ONLY_TAGS=$(echo -e "${SRC_TAGS}\n${ONE_SIDE_TAGS}" | sort | uniq -d)
for t in ${SRC_ONLY_TAGS}; do
echo $t
docker pull "${SRC_REPO}:$t"
docker tag "${SRC_REPO}:$t" "${DST_REPO}:$t"
docker push "${DST_REPO}:$t"
done
deleteTags() {
docker images | grep "$1" | awk '{print $2}' | xargs -I{} docker rmi $1:{}
}
# deleteTags "${SRC_REPO}"
# deleteTags "${DST_REPO}"
./docker-cp-repo.sh srzzumix/openapi-cxx srzzumix/oneapi-cxx

のように使います。
jq 使うと repository のタグ一覧が簡単に取れるので便利です。
今回は以上。では。

0 件のコメント:

コメントを投稿