'How to list docker tags with date?

I need a list of all repository tags for a remote Docker registry, along with their date = the date the image tag was pushed.

Or at least the tags sorted according when they were created (without the date, but in chronological order).

What I have now (from the Official Docker docs) is:

curl -XGET -u my_user:my_pass 'https://my_registry.com/v2/my_repo/tags/list'

But that seems to return the tags in random order. I need to further filter / postprocess the tags programmatically, so I need to fetch additional per-tag metadata.

Any idea how to do that?



Solution 1:[1]

In the past, I wrote a script to migrate images from local docker registry to ECR, maybe you want to use some of the lines like,

tags=$(curl -s https://$username:$password@$privreg/v2/$repo/tags/list?n=2048 | jq '.tags[]' | tr -d '"')

creationdate=$(curl -s https://$username:$password@$privreg/v2/$repo/manifests/$tag | jq -r '.history[].v1Compatibility' | jq '.created' | sort | tail -n1)

#!/bin/bash
read -p 'Username: ' username
read -sp 'Password: ' password
privreg="privreg.example.com"
awsreg="<account_id>.dkr.ecr.<region_code>.amazonaws.com"
repos=$(curl -s https://$username:$password@$privreg/v2/_catalog?n=2048 | jq '.repositories[]' | tr -d '"')
for repo in $repos; do
    tags=$(curl -s https://$username:$password@$privreg/v2/$repo/tags/list?n=2048 | jq '.tags[]' | tr -d '"')
    project=${repo%/*}
    service=${repo#*/}
    awsrepo=$(aws ecr describe-repositories | grep -o \"$repo\" | tr -d '"')
    if [ "$awsrepo" != "$repo" ]; then aws ecr create-repository --repository-name $repo; fi
        for tag in $tags; do
            creationdate=$(curl -s https://$username:$password@$privreg/v2/$repo/manifests/$tag | jq -r '.history[].v1Compatibility' | jq '.created' | sort | tail -n1)
            echo "$repo:$tag      $creationdate" >> $project-$service.txt
        done
        sort -k2 $project-$service.txt | tail -n3 | cut -d " " -f1  > $project-$service-new.txt
            cat $project-$service-new.txt
        while read repoandtags; do
           sudo docker pull $privreg/$repoandtags
               sudo docker tag  $privreg/$repoandtags $awsreg/$repoandtags
               sudo docker push $awsreg/$repoandtags
        done < $project-$service-new.txt

Script might not work and need some changes, but you can use some parts of it, so I will leave it in the post as an example.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Oguzhan Aygun