A modern, private Docker registry with multi-user support, featuring a beautiful Bootstrap-based web interface with multiple themes.
cd docker
docker-compose -f docker-compose.sqlite.yml up -d
cd docker
docker-compose -f docker-compose.mariadb.yml up -d
cd docker
docker build -f Dockerfile.sqlite -t docker-registry-sqlite ..
cd docker
docker build -f Dockerfile.mariadb -t docker-registry-mariadb ..
docker run -d \
--name docker-registry \
-p 8080:8080 \
-v registry-data:/data \
-e JWT_SECRET=your-secret \
-e ADMIN_PASSWORD=your-password \
docker-registry-sqlite
docker run -d \
--name docker-registry-mariadb \
-p 8080:8080 \
-e DB_SOURCE="root:password@tcp(mariadb:3306)/registry" \
-e JWT_SECRET=your-secret \
-e ADMIN_PASSWORD=your-password \
--link mariadb:mariadb \
docker-registry-mariadb
| Variable | Description | Default |
|---|---|---|
| PORT | Server port | 8080 |
| DB_DRIVER | Database driver (sqlite/mysql/mariadb) | sqlite |
| DB_SOURCE | Full DSN connection string (overrides individual DB_* vars) | /data/registry.db |
| DB_HOST | External database host (leave empty for SQLite) | localhost |
| DB_PORT | External database port | 3306 |
| DB_USER | External database username | root |
| DB_PASSWORD | External database password | password |
| DB_NAME | External database name | registry |
| JWT_SECRET | Secret key for JWT tokens | auto-generated |
| ADMIN_USERNAME | Initial admin username | admin |
| ADMIN_PASSWORD | Initial admin password | admin123 |
| ADMIN_EMAIL | Admin email | admin@localhost |
| HTTPS_ENABLED | Enable HTTPS cookies | false |
docker run -d \
-p 8080:8080 \
-v registry-data:/data \
-e DB_DRIVER=sqlite \
-e DB_SOURCE=/data/registry.db \
docker-registry-sqlite
docker run -d \
-p 8080:8080 \
-e DB_DRIVER=mysql \
-e DB_HOST=mariadb.example.com \
-e DB_PORT=3306 \
-e DB_USER=registry \
-e DB_PASSWORD=secure_password \
-e DB_NAME=registry \
docker-registry-sqlite
Or use full DSN:
docker run -d \
-p 8080:8080 \
-e DB_DRIVER=mysql \
-e DB_SOURCE="user:password@tcp(host:3306)/dbname" \
docker-registry-sqlite
unraid/docker-registry-sqlite.xml - SQLite versionunraid/docker-registry-mariadb.xml - MariaDB versioncd vm-builder
./build-vm.sh
This creates:
.qcow2 - QEMU/KVM image.vmdk - VMware image.vdi - VirtualBox imagecd os-builder
./build-iso.sh
POST /api/v1/auth/login - LoginPOST /api/v1/auth/register - Register new userPOST /api/v1/auth/logout - LogoutGET /api/v1/auth/me - Get current userGET /api/v1/repositories - List repositoriesPOST /api/v1/repositories - Create repositoryGET /api/v1/repositories/{id} - Get repositoryPUT /api/v1/repositories/{id} - Update repositoryDELETE /api/v1/repositories/{id} - Delete repositoryGET /api/v1/repositories/{id}/tags - List tagsPOST /api/v1/repositories/{id}/tags - Create tagDELETE /api/v1/repositories/{id}/tags/{tagId} - Delete tagGET /api/v1/users - List users (admin only)PUT /api/v1/users/{id} - Update user (admin only)DELETE /api/v1/users/{id} - Delete user (admin only)GET /api/v1/stats - Get statisticsGET /api/v1/audit - Get audit log (admin only)GET /v2/ - API version checkGET /v2/{name}/manifests/{reference} - Get manifestGET /v2/{name}/blobs/{digest} - Get blobdocker login localhost:8080
docker tag myimage:latest localhost:8080/myimage:latest
docker push localhost:8080/myimage:latest
docker pull localhost:8080/myimage:latest
| Metric | Before | After |
|---|---|---|
| Total CVEs | 17 | 2 |
| Critical | 1 | 0 |
| High | 2 | 0 |
| Medium | 14 | 2 |
--virtual .rundeps to avoid pulling unnecessary dependenciesMIT License