The simplest and most complete UI for your private registry
:warning:
joxit/docker-registry-ui:masterand
joxit/docker-registry-ui:maintags contains unreleased v2.0.0 version!
This project aims to provide a simple and complete user interface for your private docker registry. You can customize the interface with various options. The major option is
SINGLE_REGISTRYwhich allows you to disable the dynamic selection of docker registeries (same behavior as the old static tag).
You may need the migration guide from 1.x to 2.x or the 1.x readme
This web user interface uses Riot the react-like user interface micro-library and riot-mui components.
docker pullcommand to clipboard (see #42).
SINGLE_REGISTRY=false).
url(e.g.
https://joxit.dev/docker-registry-ui/demo?url=https://registry.example.com) (when
SINGLE_REGISTRY=false).
REGISTRY_URLenvironment variable) to your docker registry (This will avoid CORS).
REGISTRY_URL(see #28).
NGINX_PROXY_HEADER_*(see #89)
SHOW_CONTENT_DIGEST(values are: [
true,
false], default:
true) (see #126).
CATALOG_ELEMENTS_LIMIT(see #127).
SINGLE_REGISTRY=falseand
SINGLE_REGISTRY=trueoptions ?
SINGLE_REGISTRYis set to false, a menu appears on the interface allowing you to dynamically change docker registry URLs.
docker images?
Hostis set to
$http_host?
nameand its
manifest(it's a sha of the content). So when you delete a tag, this will delete all tags of this image with the same SHA/manifest.
Need more informations ? Try my examples or open an issue.
Some env options are available for use this interface for only one server.
REGISTRY_URL: The default url of your docker registry. You may need CORS configuration on your registry. (default: derived from the hostname of your UI).
REGISTRY_TITLE: Set a custom title for your user interface. (default: value derived from
REGISTRY_URL).
PULL_URL: Set a custom url when you copy the
docker pullcommand. (default: value derived from
REGISTRY_URL).
DELETE_IMAGES: Set if we can delete images from the UI. (default:
false)
SHOW_CONTENT_DIGEST: Show content digest in docker tag list. (default:
true)
CATALOG_ELEMENTS_LIMIT: Limit the number of elements in the catalog page. (default:
100000).
SINGLE_REGISTRY: Remove the menu that show the dialogs to add, remove and change the endpoint of your docker registry. (default
false)
NGINX_PROXY_PASS_URL: Update the default Nginx configuration and set the proxy_pass to your backend docker registry (this avoid CORS configuration).
NGINX_PROXY_HEADER_*: Update the default Nginx configuration and set custom headers for your backend docker registry. Only when
NGINX_PROXY_PASS_URLis used.
There are some examples with docker-compose and docker-registry-ui as proxy here or docker-registry-ui as standalone here.
Your server should be configured to accept CORS.
If your docker registry does not need credentials, you will need to send this HEADER:
Access-Control-Allow-Origin: ['*']
If your docker registry need credentials, you will need to send these HEADERS:
http: headers: Access-Control-Allow-Origin: [''] Access-Control-Allow-Credentials: [true] Access-Control-Allow-Headers: ['Authorization', 'Accept'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS'] # Optional
An alternative for CORS issues is a plugin on your browser, more info here (thank you xmontero).
For deleting images, you need to activate the delete feature in your registry:
storage: delete: enabled: true
And you need to add these HEADERS:
http: headers: Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Expose-Headers: ['Docker-Content-Digest']
If you are running the static interface don't forget the environment variable
DELETE_IMAGES.
Example of docker registry configuration file:
version: 0.1 log: fields: service: registry storage: delete: enabled: true cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff] Access-Control-Allow-Origin: ['http://127.0.0.1:8000'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Allow-Headers: ['Authorization', 'Accept'] Access-Control-Max-Age: [1728000] Access-Control-Allow-Credentials: [true] Access-Control-Expose-Headers: ['Docker-Content-Digest'] auth: htpasswd: realm: basic-realm path: /etc/docker/registry/htpasswd
If you do not want to install the docker-registry-ui on your server, you may check out the Electron standalone application.