{"id":19569150,"url":"https://github.com/buluma/docker-registry-ui","last_synced_at":"2026-05-09T05:03:08.722Z","repository":{"id":59045218,"uuid":"474007713","full_name":"buluma/docker-registry-ui","owner":"buluma","description":"Docker Registry UI","archived":false,"fork":false,"pushed_at":"2024-01-08T19:43:33.000Z","size":948,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-26T10:26:58.227Z","etag":null,"topics":["docker","docker-image","docker-registry","docker-registry-ui","docker-registry-v2"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/buluma/docker-registry-ui","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buluma.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-25T12:51:37.000Z","updated_at":"2024-06-13T01:08:38.000Z","dependencies_parsed_at":"2024-06-20T05:40:27.598Z","dependency_job_id":"572f0554-1493-416f-87ec-b43d5c523d08","html_url":"https://github.com/buluma/docker-registry-ui","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/buluma/docker-registry-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buluma%2Fdocker-registry-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buluma%2Fdocker-registry-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buluma%2Fdocker-registry-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buluma%2Fdocker-registry-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buluma","download_url":"https://codeload.github.com/buluma/docker-registry-ui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buluma%2Fdocker-registry-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32807861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-image","docker-registry","docker-registry-ui","docker-registry-v2"],"created_at":"2024-11-11T06:07:51.386Z","updated_at":"2026-05-09T05:03:08.701Z","avatar_url":"https://github.com/buluma.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Docker Registry UI\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/buluma/docker-registry-ui-master)](https://goreportcard.com/report/github.com/buluma/docker-registry-ui-master)\n\n### Overview\n\n* Web UI for Docker Registry\n* Browse namespaces, repositories and tags\n* Display image details by layers\n* Display sub-images of multi-arch or cache type of image\n* Support Manifest v2 schema 1, Manifest v2 schema 2, Manifest List v2 schema 2 and their confusing combinations\n* Fast and small, written on Go\n* Automatically discover an authentication method (basic auth, token service etc.)\n* Caching the list of repositories, tag counts and refreshing in background\n* Event listener of notification events coming from Registry\n* Store events in sqlite or MySQL database\n* CLI option to maintain the tags retention: purge tags older than X days keeping at least Y tags\n\nNo TLS or authentication implemented on the UI web server itself.\nAssuming you will proxy it behind nginx, oauth2_proxy or something.\n\nDocker images [buluma/docker-registry-ui](https://hub.docker.com/r/buluma/docker-registry-ui/tags/)\n\n### Configuration\n\nThe configuration is stored in `config.yml` and the options are self-descriptive.\n\n### Run UI\n\n    docker run -d -p 8000:8000 -v /local/config.yml:/opt/config.yml:ro \\\n        --name=registry-ui buluma/docker-registry-ui\n\nTo run with your own root CA certificate, add to the command:\n\n    -v /local/rootcacerts.crt:/etc/ssl/certs/ca-certificates.crt:ro\n\nTo preserve sqlite db file with event notifications data, add to the command:\n\n    -v /local/data:/opt/data\n\nEnsure /local/data is owner by nobody (alpine user id is 65534).\n\nYou can also run the container with `--read-only` option, however when using using event listener functionality\nyou need to ensure the sqlite db can be written, i.e. mount a folder as listed above (rw mode).\n\nTo run with a custom TZ:\n\n    -e TZ=America/Los_Angeles\n\n## Configure event listener on Docker Registry\n\nTo receive events you need to configure Registry as follow:\n\n    notifications:\n      endpoints:\n        - name: docker-registry-ui\n          url: http://docker-registry-ui.local:8000/api/events\n          headers:\n            Authorization: [Bearer abcdefghijklmnopqrstuvwxyz1234567890]\n          timeout: 1s\n          threshold: 5\n          backoff: 10s\n          ignoredmediatypes:\n            - application/octet-stream\n\nAdjust url and token as appropriate.\nIf you are running UI from non-root base path, e.g. /ui, the URL path for above will be `/ui/api/events`.\n\n## Using MySQL instead of sqlite3 for event listener\n\nTo use MySQL as a storage you need to change `event_database_driver` and `event_database_location`\nsettings in the config file. It is expected you create a database mentioned in the location DSN.\nMinimal privileges are `SELECT`, `INSERT`, `DELETE`.\nYou can create a table manually if you don't want to grant `CREATE` permission:\n\n\tCREATE TABLE events (\n\t\tid INTEGER PRIMARY KEY AUTO_INCREMENT,\n\t\taction CHAR(4) NULL,\n\t\trepository VARCHAR(100) NULL,\n\t\ttag VARCHAR(100) NULL,\n\t\tip VARCHAR(15) NULL,\n\t\tuser VARCHAR(50) NULL,\n\t\tcreated DATETIME NULL\n\t);\n\n### Schedule a cron task for purging tags\n\nTo delete tags you need to enable the corresponding option in Docker Registry config. For example:\n\n    storage:\n      delete:\n        enabled: true\n\nThe following example shows how to run a cron task to purge tags older than X days but also keep\nat least Y tags no matter how old. Assuming container has been already running.\n\n    10 3 * * * root docker exec -t registry-ui /opt/docker-registry-ui -purge-tags\n\nYou can try to run in dry-run mode first to see what is going to be purged:\n\n    docker exec -t registry-ui /opt/docker-registry-ui -purge-tags -dry-run\n\nAlternatively, you can schedule the purging task with built-in cron feature:\n\n    purge_tags_keep_days: 90\n    purge_tags_keep_count: 2\n    purge_tags_schedule: '0 10 3 * * *'\n\nNote, the cron schedule format includes seconds! See https://godoc.org/github.com/robfig/cron\n\n### Debug mode\n\nTo increase http request verbosity, run container with `-e GOREQUEST_DEBUG=1`.\n\n### About Docker image formats...\n\nDocker image formats and their confusing combinations as supported by this UI:\n\n* Manifest v2 schema 1 only: older format, e.g. created with Docker 1.9.\n* Manifest v2 schema 1 + Manifest v2 schema 2: current format of a single image, the image history are coming from schema 1, should be referenced by repo:tag name.\n* Manifest v2 schema 1 + Manifest List v2 schema 2: multi-arch image format containing digests of sub-images, the image history are coming from schema 1 (no idea from what sub-image it was picked up when created), should be referenced by repo:tag name.\n* Manifest v2 schema 2: current image format referenced by its digest sha256, no image history.\n* Manifest List v2 schema 2: multi-arch image referenced by its digest sha256 or cache image referenced by tag name, no image history.\n\n\n### Screenshots\n\nRepository list / home page:\n\n![image](screenshots/1.png)\n\nRepository tag list:\n\n![image](screenshots/2.png)\n\nTag info page:\n\n![image](screenshots/3.png)\n\nEvent log page:\n\n![image](screenshots/4.png)\n\n### Credits\nInspired by [Quiq](https://github.com/Quiq/docker-registry-ui)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuluma%2Fdocker-registry-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuluma%2Fdocker-registry-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuluma%2Fdocker-registry-ui/lists"}