Last active
November 3, 2023 14:11
-
-
Save robv8r/fa66f5e0fdf001f425fe9facf2db6d49 to your computer and use it in GitHub Desktop.
List Docker Image Tags using bash
arr=("$@")
for item in "${arr[@]}";
This is just a clumsy and memory-squandering way to say for item in "$@";
images=($@)
for image in "${images[@]}"; do
This adds a quoting error (you want "$@"
, always, not a bare $@
).
Thx for this script. I used a bit of jq/sort/sed to get the version number of the "latest" tag like so. Given that an image can have many tags going way back one probably needs to know apriori which major version is the "latest" and supply that.
docker_latest_image() {
image=$1
major=${2:-1}
tokenUri="https://auth.docker.io/token"
data=("service=registry.docker.io" "scope=repository:$image:pull")
token="$(curl --silent --get --data-urlencode ${data[0]} --data-urlencode ${data[1]} $tokenUri | jq --raw-output '.token')"
listUri="https://registry-1.docker.io/v2/$image/tags/list"
curl --silent --get -H "Accept: application/json" -H "Authorization: Bearer $token" $listUri \
| jq --raw-output ".tags[] | select(. | startswith(\"$major.\"))" | sort -V | sed -n \$p
}
docker_latest_image library/alpine 3
3.18.4
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@jcwatson11: It depends on the authentication mechanism of your private repository. What type of private repository are your working with? Specifically, is it
registry:2
, ghcr.io, or a hosted provider?