A selfhosted Docker Registry browser, inspect and bulk-delete images across multiple registries.
981
A self-hosted Docker Registry browser. Browse, inspect, and delete images and tags across multiple private registries from a single dark-themed UI.
Note: RegistryView is a companion UI for the official Docker Registry image (
registry:3, also compatible withregistry:2). It does not include a registry — you need to be running your own private registry for RegistryView to connect to.
linux/amd64linux/arm64services:
registryview:
image: baz1536/registryview:latest
container_name: registryview
restart: unless-stopped
ports:
- "3544:3544"
environment:
PORT: 3544
NODE_ENV: production
SESSION_SECRET: change-me-to-a-long-random-string
ENCRYPTION_KEY: change-me-to-a-long-random-string
volumes:
- registryview_data:/app/data
- registryview_logs:/app/logs
volumes:
registryview_data:
registryview_logs:
Then open http://localhost:3544 in your browser and add your first registry.
| Variable | Required | Default | Description |
|---|---|---|---|
PORT | No | 3544 | Port the server listens on |
NODE_ENV | No | development | Set to production in Docker |
| Variable | Required | Default | Description |
|---|---|---|---|
AUTH_ENABLED | No | true | Set to false to disable the login screen entirely |
UI_USERNAME | If auth on | admin | Username for the login screen |
UI_PASSWORD | If auth on | — | Password for the login screen. Server will not start without this set when auth is enabled. |
SESSION_SECRET | Yes | — | Long random string used to sign session cookies |
Two-factor authentication is optional and managed from the Security page once logged in. When you click Set up 2FA, a TOTP secret is generated and stored encrypted in mfa.json in your data volume. Scan the QR code with your authenticator app, verify a code to confirm, and 2FA is automatically enabled.
To disable or reset 2FA, use the buttons on the Security page — no server restart or env var changes needed. If you lose access to your authenticator app, click Reset secret to generate a fresh QR code to re-scan.
| Variable | Required | Default | Description |
|---|---|---|---|
ENCRYPTION_KEY | Yes | — | Long random string used to encrypt registry passwords at rest |
Important: Both
SESSION_SECRETandENCRYPTION_KEYshould be long, random strings. Generate one with:openssl rand -hex 32If
ENCRYPTION_KEYchanges, existing registry passwords will no longer decrypt — you will need to re-enter them.
| Variable | Required | Default | Description |
|---|---|---|---|
DATA_DIR | No | /app/data | Directory to store registry configuration (registries.json) |
LOG_DIR | No | /app/logs | Directory to write daily log files |
LOG_LEVEL | No | info | Log verbosity: error, warn, info, debug |
If your registries are only reachable via an HTTP/HTTPS proxy:
| Variable | Required | Default | Description |
|---|---|---|---|
HTTPS_PROXY | No | — | Proxy URL for outbound registry connections, e.g. http://proxy.internal:3128 |
HTTP_PROXY | No | — | Fallback proxy URL for HTTP registries |
NO_PROXY | No | — | Comma-separated list of hosts to bypass the proxy, e.g. localhost,.internal,192.168.1.5 |
| Path | Description |
|---|---|
/app/data | Registry configuration with encrypted credentials — mount this to persist your registries |
/app/logs | Daily rotating log files |
services:
registry:
image: registry:latest
container_name: registry
restart: unless-stopped
environment:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
- registry_storage:/var/lib/registry
registryview:
image: baz1536/registryview:latest
container_name: registryview
hostname: registryview
restart: unless-stopped
depends_on:
- registry
mem_limit: 256m
ports:
- "3544:3544"
environment:
TZ: Europe/London
PORT: 3544
NODE_ENV: production
# Authentication
AUTH_ENABLED: "true"
UI_USERNAME: admin
UI_PASSWORD: your-secure-password
# Security — generate with: openssl rand -hex 32
SESSION_SECRET: your-long-random-session-secret
ENCRYPTION_KEY: your-long-random-encryption-key
# Storage
DATA_DIR: /app/data
LOG_DIR: /app/logs
LOG_LEVEL: info
# Outbound proxy (optional)
# HTTPS_PROXY: http://proxy.internal:3128
# NO_PROXY: localhost,127.0.0.1,.internal
volumes:
- registryview_data:/app/data
- registryview_logs:/app/logs
volumes:
registry_storage:
registryview_data:
registryview_logs:
NODE_ENV=production is set. RegistryView sets trust proxy automatically, so rate limiting and secure cookies work correctly with X-Forwarded-For headers.registry:2 and registry:3. The HTTP API is unchanged (/v2/). If running registry:3, note the garbage collection config path changed to /etc/distribution/config.yml.docker.example.com or localhost:5000. RegistryView will use https:// for remote hosts and http:// for localhost/IP addresses automatically.REGISTRY_STORAGE_DELETE_ENABLED=true set. This is off by default in the official Docker Registry image.GitHub: https://github.com/baz1536/registryview
MIT — Copyright © 2026 dBR Promotions
Content type
Image
Digest
sha256:055cbcb94…
Size
86.5 MB
Last updated
12 days ago
docker pull baz1536/registryview