A simple, lightweight UI for exploring and managing Docker/OCI container registries.
Important
I’m currently working towards the upcoming v1.0.0
release. While the current version works well, it doesn’t scale efficiently—even for relatively small projects (e.g., repositories with 100+ tags).
To address this, I’ve opened a tracking issue: #28.
Community input is welcome — feel free to share your ideas or propose improvements in the issue.
The UI can be deployed in minutes with Docker Compose:
services:
registry-ui:
image: ghcr.io/eznix86/docker-registry-ui:latest
ports:
- "8011:80"
environment:
- REGISTRY_URL=http://your-registry.com:5000
- REGISTRY_AUTH=base64basicauthhere
Then open the UI at: http://localhost:8011
services:
registry-ui:
image: ghcr.io/eznix86/docker-registry-ui:latest
ports:
- "8011:80"
environment:
- REGISTRY_URL=http://your-registry.com:5000
- REGISTRY_AUTH=base64basicauthhere
helm repo add docker-registry-ui https://eznix86.github.io/docker-registry-ui
helm repo update
helm install docker-registry-ui docker-registry-ui/docker-registry-ui \
-n docker-registry-ui \
--create-namespace
kubectl create secret generic registry-ui-secret \
-n docker-registry-ui \
--from-literal=url="http://your-registry.com:5000" \
--from-literal=auth="$(echo -n 'username:password' | base64)"
Reference the secret in your Helm values:
env:
- name: REGISTRY_URL
valueFrom:
secretKeyRef:
name: registry-ui-secret
key: url
- name: REGISTRY_AUTH
valueFrom:
secretKeyRef:
name: registry-ui-secret
key: auth
The UI supports connections to multiple registries. Configure them via environment variables with suffixes:
# Default registry
REGISTRY_URL=https://repository.a.com
REGISTRY_AUTH=...
# Additional registries
REGISTRY_URL_PERSONAL=https://repository.b.com
REGISTRY_AUTH_PERSONAL=...
REGISTRY_URL_BUSINESS=https://repository.business.com
REGISTRY_AUTH_BUSINESS=...
REGISTRY_URL_CUSTOM=https://repository.whatever.com
REGISTRY_AUTH_CUSTOM=...
Notes:
-
From
v0.3.2
,REGISTRY_AUTH
(or its suffixed variants) can be omitted for unauthenticated registries. -
From
v0.5.0
, GitHub Container Registry is supported:REGISTRY_URL_GHCR=https://ghcr.io REGISTRY_AUTH_GHCR=base64(github-username:PAT)
The PAT requires
delete:packages, repo, write:packages
permissions. Generate a PAT.
To contribute, set up a local development environment:
# Prepare environment variables
cp .env.example .env
# Example: echo -n "USERNAME:PASSWORD" | base64 > .env
bun install
bun run dev # start local dev server
bun run lint # run linter
bun run lint:fix # auto-fix linting issues where possible
Pull requests are welcome. Please ensure code is linted and tested before submission.
When deleting images, Docker Registry v2/v3 only marks them as deleted. Disk space is not automatically reclaimed. To free space, run garbage collection inside your registry container:
# Run garbage collection
bin/registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
# Optionally, remove an entire repository manually
rm -rf /var/lib/registry/docker/registry/v2/repositories/<repository_name>
Further reading: