How to list all images from an account in GitHub Container Registry?

7.5k Views Asked by At

I want to know what images are uploaded to a specific owner in GitHub Container Registry. Containers are referred like this: https://ghcr.io/OWNER/<imageName>:<imageTag>

4

There are 4 best solutions below

1
On

You can list images (packages) also from within GitHub UI.

List of packages can be found when you simply navigate to a specific GitHub project such as https://github.com/fluxcd/flux2 and in the right panel you can see and click Packages button.

The URL for container GitHub package window is in format https://github.com/<ORGANIZATION>/<PROJECT>/pkgs/container/<PACKAGE>. Here is example URL for Flux2 CLI - https://github.com/fluxcd/flux2/pkgs/container/flux-cli.

From there it is also possible to list all pushed tags.

0
On

You can also do this with GitHub CLI.

Create a classic token with at least the repo, read:packages, read:org permissions. I am not sure why, but the last one was needed for me.

The following generates the same as the previous Octokit answer.

#!/bin/sh

echo "{TOKEN}" | gh auth login --with-token
user=django
containers=$(gh api /users/$user/packages?package_type=container | jq -r .[].name)
for container in $containers; do
    versions=$(gh api /users/$user/packages/container/$container/versions)
    echo $versions | jq "[
        {
            container: \"$container\",
            name: .[].name,
            tags: .[].metadata.container.tags,
        }
    ]"
done

Output:

[
  {
    "container": "code.djangoproject.com",
    "name": "sha256:5ad13961f099c43732cd04638b7504df5c82a993b3c3e29c1e4a0346c04e5e59",
    "tags": [
      "sha-9ce5a20",
      "latest",
      "main"
    ]
  },
  {
    "container": "code.djangoproject.com",
    "name": "sha256:5ad13961f099c43732cd04638b7504df5c82a993b3c3e29c1e4a0346c04e5e59",
    "tags": [
      "sha-125e6f9"
    ]
  },
  {
    "container": "code.djangoproject.com",
    "name": "sha256:5ad13961f099c43732cd04638b7504df5c82a993b3c3e29c1e4a0346c04e5e59",
    "tags": [
      "sha-5dc9fba"
    ]
  }
]
3
On

You can use the GitHub Packages API.

The API requires authentication. You can use a personal token.

With Octokit:

import { Octokit } from "@octokit/rest";

const octokit = new Octokit({ auth: "<YOUR TOKEN> " });

const username = "django";
await octokit.rest.packages
  .listPackagesForUser({ package_type: "container", username })
  .then(
    async ({ data }) =>
      await Promise.all(
        data.map(
          async (container) =>
            await octokit.rest.packages
              .getAllPackageVersionsForPackageOwnedByUser({
                package_type: container.package_type,
                username,
                package_name: container.name,
              })
              .then(({ data }) =>
                data.map((image) => {
                  return {
                    container: container.name,
                    name: image.name,
                    tags: image?.metadata?.container?.tags ?? [],
                  };
                })
              )
        )
      )
  )
  .then((result) => console.log(result.flat()));

Output:

[
  {
    container: 'code.djangoproject.com',
    name: 'sha256:eba6cf86886c5920dba74cbe579e9ab996851e6a9232d1095afa92e9d2901616',
    tags: [ 'sha-d679c9a', 'latest', 'main' ]
  },
  {
    container: 'code.djangoproject.com',
    name: 'sha256:4b2472bfcc3218f5396830c865592628056864c5a65015e9d32d75234941b934',
    tags: [ 'sha-019618e' ]
  },
  {
    container: 'code.djangoproject.com',
    name: 'sha256:f9fe5334a871286f0a75710d3c38b00e07aa8dd90cd206644155136ef835f278',
    tags: [ 'sha-db2c406' ]
  },
  {
    container: 'code.djangoproject.com',
    name: 'sha256:99ad57b1bb7ca2d82f3e1abb61f496c9ae7dc7a0e4721c595b107afe85ab03ea',
    tags: [ 'sha-19a7a14' ]
  },
  {
    container: 'code.djangoproject.com',
    name: 'sha256:1d284e53531f9a0e963ad843bce395453467bdd0ee0b89b9ab231a72cea6f10a',
    tags: [ 'sha-0a02bc3', 'docker' ]
  }
]
4
On

If you published a package to GHCR and want to see it in the browser UI, go to this URL:

https://github.com/username?tab=packages

Just replace 'username' with your GitHub username.