A lightweight web UI based on NextJS to manage your private Docker Registry v2, allowing you to browse repositories, view image details, check storage size, and delete images/tags directly.
- 🔐 Login with basic auth credentials
- 📦 List all repositories and their tags
- 📏 Display image size based on manifest layers
- 🗑️ Delete image tags/manifests safely
- 🔍 Search repositories
- 📊 Display statistics and storage usage
git clone https://github.com/mastomii/next-registry-ui.git
cd next-registry-uiCreate a .env.local file in the root:
# Docker Registry endpoint (accessible from the UI)
NEXT_PUBLIC_REGISTRY_HOST=http://your-private-registry-url
# Basic Auth credentials for internal server-side calls to the registry
REGISTRY_HOST=http://your-private-registry-url
REGISTRY_USER=user
REGISTRY_PASS=yout-strong-passwordIf the Docker Registry runs on the host and the UI is in a container, use
http://host.docker.internal:5000.
npm install
npm run devOpen your browser at: http://localhost:3000
The UI uses Basic Auth to connect to the Docker Registry.
Your login credentials are stored in localStorage under the key registry_auth and sent with each request.
After deleting tags or manifests via UI, you should manually run garbage collection on the registry to free up space:
docker exec registry bin/registry garbage-collect /etc/distribution/config.ymlMake sure
delete.enabled: trueis set in the registry's config file.
To start a private registry:
docker run -d -p 5000:5000 --restart=always --name registry registry:2If you want to enable deletion:
# config.yml
storage:
delete:
enabled: trueThen mount this config and run the registry with:
docker run -d -p 5000:5000 --restart=always --name registry -v $(pwd)/config.yml:/etc/docker/registry/config.yml registry:2If you want to run this UI using Docker Compose, here's a basic example:
services:
registry:
image: mastomi/next-registry-ui:latest
restart: always
environment:
- NEXT_PUBLIC_REGISTRY_HOST=http://your-private-registry-url
- REGISTRY_HOST=http://your-private-registry-url
- REGISTRY_USER=your-private-registry-user
- REGISTRY_PASS=your-private-registry-password

