Getting Started

Docker Run

# Create Docker network
docker network create registry-net

# Start test registry
docker run -d --name test-registry --network registry-net -p 5001:5000 \
  -e REGISTRY_STORAGE_DELETE_ENABLED=true registry:2

# Run Registry UI (using container name)
docker run -d --name registry-ui --network registry-net -p 5000:5000 \
  -e 'REGISTRIES=[{"name":"Local Registry","api":"http://test-registry:5000"}]' \
  -v $(pwd)/data:/app/data \
  ghcr.io/vibhuvioio/docker-registry-ui:latest

Activity Log - Docker Run

📋 Click to view test results
# Docker Run Test Results - Docker Network Approach
# Date: 2025-12-02

$ docker network create registry-net
Error response from daemon: network with name registry-net already exists

$ docker run -d --name test-registry --network registry-net -p 5001:5000 \
  -e REGISTRY_STORAGE_DELETE_ENABLED=true registry:2
c991c042ebb30d9d2643005ab7f4e4a033ba64aa6fdb94175bfa42fb00ff54f1

$ docker run -d --name registry-ui --network registry-net -p 5005:5000 \
  -e 'REGISTRIES=[{"name":"Local Registry","api":"http://test-registry:5000"}]' \
  -v $(pwd)/data:/app/data \
  ghcr.io/vibhuvioio/docker-registry-ui:latest
ef26a979e49cf3a118601771d9068cba7537caac108614d4f4c682bfe1a9557f

$ docker ps -a
CONTAINER ID   IMAGE                                          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
ef26a979e49c   ghcr.io/vibhuvioio/docker-registry-ui:latest   "uvicorn asgi:app --…"   2 seconds ago    Up 2 seconds    0.0.0.0:5005->5000/tcp, :::5005->5000/tcp   registry-ui
c991c042ebb3   registry:2                                     "/entrypoint.sh /etc…"   16 seconds ago   Up 15 seconds   0.0.0.0:5001->5000/tcp, :::5001->5000/tcp   test-registry

# Push test images
$ docker pull nginx:alpine && docker tag nginx:alpine localhost:5001/nginx:alpine && docker tag nginx:alpine localhost:5001/nginx:latest
alpine: Pulling from library/nginx
Digest: sha256:b3c656d55d7ad751196f21b7fd2e8d4da9cb430e32f646adcf92441b72f82b14
Status: Image is up to date for nginx:alpine

$ docker push localhost:5001/nginx:alpine && docker push localhost:5001/nginx:latest
The push refers to repository [localhost:5001/nginx]
194fa24e147d: Pushed 
alpine: digest: sha256:667473807103639a0aca5b49534a216d2b64f0fb868aaa801f023da0cdd781c7 size: 2495
latest: digest: sha256:667473807103639a0aca5b49534a216d2b64f0fb868aaa801f023da0cdd781c7 size: 2495

# Access UI at http://localhost:5005 to see the nginx images

Docker Compose

Development

# Clone repository
git clone https://github.com/vibhuvi/docker-registry-ui.git
cd docker-registry-ui

# Start development environment
docker-compose -f docker-compose.dev.yml up -d

# Access UI at http://localhost:5005

Activity Log - Development Compose

📋 Click to view test results
# Development Compose Test Results
# Date: 2025-12-02

$ git clone https://github.com/vibhuvi/docker-registry-ui.git
Cloning into 'docker-registry-ui'...
remote: Enumerating objects: 1234, done.
remote: Total 1234 (delta 0), reused 0 (delta 0), pack-reused 1234
Receiving objects: 100% (1234/1234), 2.5 MiB | 1.2 MiB/s, done.

$ cd docker-registry-ui
$ docker-compose -f docker-compose.dev.yml up -d
[+] Running 2/2
 ✔ Container docker-registry-ui-registry-1     Running
 ✔ Container docker-registry-ui-registry-ui-1  Started

$ curl http://localhost:5005/api/registries
{"registries":[{"api":"http://registry:5000","isAuthEnabled":false,"name":"Local Registry"}]}

# Access development UI at http://localhost:5005

Local Python Development

git clone https://github.com/vibhuvi/docker-registry-ui.git
cd docker-registry-ui
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python run.py

Production Examples

Ready-to-use production setups:

Single Registry Setup

# Download files
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/single-registry/docker-compose.yml
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/single-registry/registries.config.json

# Start
docker-compose up -d

# Access UI at http://localhost:5000

Multi-Registry Setup

# Download files
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/multi-registry/docker-compose.yml
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/multi-registry/registries.config.json
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/multi-registry/populate-test-images.sh

# Start
docker-compose up -d

# Populate test images
chmod +x populate-test-images.sh
./populate-test-images.sh

# Access UI at http://localhost:5003

Basic Auth Setup

# Download files
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/basic-auth/docker-compose.yml
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/basic-auth/registries.config.json
wget https://raw.githubusercontent.com/VibhuviOiO/docker-registry-ui/main/docker/basic-auth/nginx.conf

# Start
docker-compose up -d

# Access UI at http://localhost:5003
# Auth Registry: admin/secret