Run the frontend and backend separately:
$ cd client && yarn run start
$ cd backend && yarn run start
Builds via Github Actions. A single container is built. The backend is also serving the JS files.
This is useful for debugging:
IMAGE=library/redis
TAG=latest
TOKEN=$(curl -s "https://auth.docker.io/token?scope=repository:$IMAGE:pull&service=registry.docker.io" | jq -r .token)
curl -s -H"Accept: application/vnd.docker.distribution.manifest.v2+json" -H"Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/$IMAGE/manifests/$TAG"
CONFIG_DIGEST=$(curl -s -H"Accept: application/vnd.docker.distribution.manifest.v2+json" -H"Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/$IMAGE/manifests/$TAG" | jq -r .config.digest)
curl -sL -H"Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/$IMAGE/blobs/$CONFIG_DIGEST"
The v2 registry requires a lot of calls to query the data we need (dates, labels), so we probably need to cache the data.
See for a discussion of these issues;
There seems to be private API just for docker hub:
https://github.com/RyanTheAllmighty/Docker-Hub-API (RyanTheAllmighty/Docker-Hub-API#23)
- Registry UI: https://github.com/Joxit/docker-registry-ui