Project Icon

docker-registry-ui

高效简洁的Docker镜像仓库管理界面

Docker Registry UI是一款功能完善的Docker镜像仓库管理界面。支持动态选择多个仓库、镜像删除、标签搜索和多架构支持等特性。采用Riot微型库构建,具有响应式设计。通过环境变量可灵活配置,是管理私有Docker镜像仓库的理想轻量级前端解决方案。

Docker Registry User Interface

Stars Pulls Sponsor Artifact Hub Version

Overview

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_REGISTRY which 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.

If you like my work and want to support it, don't hesitate to sponsor me.

Supported Docker tags

  • latest: image with the latest release of Docker Registry UI based on nginx:alpine
  • latest-debian: image with the latest release of Docker Registry UI based on nginx:debian
  • main, master: image with the beta version of Docker Registry UI based on nginx:alpine
  • main-debian, master-debian: image with the beta version of Docker Registry UI based on nginx:debian
  • 2: image with the latest release of Docker Registry UI v2 (includes latest minor and patch version)
  • 2.x: image with the latest release of Docker Registry UI v2.x (includes latest patch version)
  • 2.x.y: image with the specific release of Docker Registry UI v2.x.y

Project Page, Live Demo, Examples, Helm Chart

preview

Hidden Features

  • Many ways to delete multiple images at once
    • Select multiple tags to delete with checkboxes (see #29 and #79). Since 1.2.0
    • Select all tags of the page with ALT + Click on the indeterminate checkbox (see #80 and #81). Since 1.2.1
    • Select all contigous tags between two tags with Shift + Click on the first tag then Shift + Click on the second tag (see #287). Since 2.4.0
  • Show sha256 for specific tag (hover image tag).
  • Sort the tag list with number compatibility (see #45 and #46). Since 0.4.0
  • Share your docker registry UI without installation or when you are deploying a UI with SINGLE_REGISTRY=false.
    • Use the public demo and the query parameter url (e.g. https://joxit.dev/docker-registry-ui/demo?url=https://registry.example.com). If you need credentials on your private registry, you must set the Access-Control-Allow-Origin to https://joxit.dev.
    • You can use a single interface with many registry, add them in the menu in the top right of the page.
  • Filter images and tags with the search bar.
    • You can select the search bar with the shortcut CRTL + F or F3. When the search bar is already focused, the shortcut will fallback to the default behavior (see #213). Since 2.1.0
  • Multi arch support in history page (see #130 and #134). Since 1.5.0
  • Show the content of the dockerfile (see #286). Since 2.4.0
  • The UI will cache requests from your registry, such as blobs and some manifests (URL with sha256:).

Checkout all options in Available options section.

FAQ

  • What is the difference between SINGLE_REGISTRY=false and SINGLE_REGISTRY=true options ?
    • When SINGLE_REGISTRY is set to false, a menu appears on the interface allowing you to dynamically change docker registry URLs.
  • Why, when I delete all tags of an image, the image is still in the UI ?
    • This is a limitation of docker registry, the garbage collector don't remove empty images. If you want to delete dangling images, you will need to delete the folder in your registry data. (see #77)
  • Why the image size in the UI is not the same as displayed during docker images ?
    • The UI displays the compressed size of the image and not the extracted size version.
  • Can I use HTTPS on the UI ?
    • Yes, put your favourite reverse proxy on the front of the UI. Your reverse proxy will take care of HTTPS connection.
  • Does the UI support authentication ?
    • Yes, but it supports only basic auth. It's a simple standalone frontend, it will use your browser window for authentication.
  • Can I use the UI and docker client with an insecure registry (registry url without https) ?
    • Yes you can, you must first configure your docker client. (see #76)
  • What does Mixed Content error mean ?
    • This means you are using a UI with HTTPS and your registry is using HTTP (unsecured). When you are on a HTTPS site, you can't get HTTP content. Upgrade you registry with a HTTPS connection.
  • Why the default nginx Host is set to $http_host ?
    • This fixes the issue #88. More about this in #113.
  • Why OPTIONS (aka preflight requests) and DELETE fails with 401 status code (using Basic Auth) ?
    • This is caused by a bug in docker registry, it returns 401 status requests on preflight requests, this breaks W3C preflight-request specification. I suggest to have your UI on the same domain than your registry e.g. registry.example.com/ui/ or use NGINX_PROXY_PASS_URL or configure a nginx/apache/haproxy in front of your registry that returns 200 on each OPTIONS requests. (see #104, #204, #207, #214, #266).
  • Can I use the docker registry ui as a standalone application (with Electron) ?
    • Yes, check out the example here. (see #129)
  • I deleted images through the UI, but they are still present on the server. How can I delete them?
    • When you delete an image with the UI, only the reference is deleted and not the content. To remove dangling images, you need to run the garbage collector of the registry with the command registry garbage-collect config.yml or docker exec registry registry garbage-collect config.yml. (see #77 #147)
  • Why when I delete one tag, all tags with the same SHA are deleted ?
    • This a docker registry API limitation, there is only one way to delete images with tag, it's by its name and 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.
  • Can I run the container with an unprivileged user ?
    • Yes you can run the container with the nginx user with the option --user nginx, this will also update the listen port to 8080 (see #224 and #234).
  • Can I use the UI with a docker hub mirror and show library/* images ?
    • Yes but it is at your own risk using two regstry servers, check the comment #155.
  • How to fix CORS issue on s3 bucket ?
    • You should add a CORS Policy on your bucket, check the issue #193.
  • Why my docker registry server is returning an error pagination number invalid ?
    • Since docker registry server 2.8.2 there is default limit of 1000 images in catalog. If you need more images update the configuration REGISTRY_CATALOG_MAXENTRIES with your max value and check the issue #306.
  • I'm using NGINX_PROXY_PASS_URL, my registry server has been recreated and the UI cannot connect with the message [error] 176#176: *2 connect() failed (111: Connection refused) while connecting to upstream, what can I do?
    • Nginx get the IP of all addresses only once at runtime, since your container has been recreated, its IP changed too. To prevent this kind of issue, you may use the option NGINX_RESOLVER and set to 127.0.0.11.

Need more informations ? Try my examples or open an issue.

Available options

You can run the container with the unprivileged user nginx, see the discussion #224.

Some env options are available for use this interface for only one server (when SINGLE_REGISTRY=true).

  • REGISTRY_URL: The default url of your docker registry. You may need CORS configuration on your registry. This is usually the domain name or IP of your registry reachable by your computer (e.g http://registry.example.com). (default: derived from the hostname of your UI).
  • REGISTRY_TITLE: Set a custom title for your user interface. (default: value derived from REGISTRY_URL) (see #28 and #32). Since 0.3.4
  • PULL_URL: Set a custom url when you copy the docker pull command (see #71). (default: value derived from REGISTRY_URL). Since 1.1.0
  • DELETE_IMAGES: Set if we can delete images from the UI. (default: false)
  • SHOW_CONTENT_DIGEST: Show/Hide content digest in docker tag list (see #126 and #131). (default: false). Since 1.4.9
  • CATALOG_ELEMENTS_LIMIT: Limit the number of elements in the catalog page (see #39, #127, #132) and #306. (default: 1000). Since 1.4.9
  • SINGLE_REGISTRY: Remove the menu that show the dialogs to add, remove and change the endpoint of your docker registry. (default: false). Since 2.0.0
  • NGINX_PROXY_PASS_URL: Update the default Nginx configuration and set the proxy_pass to your backend docker registry (this avoid CORS configuration). This is usually the name of your registry container in the form http://registry:5000. Since 2.0.0
  • NGINX_PROXY_HEADER_*: Update the default Nginx configuration and set custom headers for your backend docker registry via environment variable and file (/etc/nginx/.env). Only when NGINX_PROXY_PASS_URL is used (see #89). Since 1.2.3
  • NGINX_PROXY_PASS_HEADER_*: Update the default Nginx configuration and forward custom headers to your backend docker registry via environment variable and file (/etc/nginx/.env). Only when NGINX_PROXY_PASS_URL is used (see #206). Since 2.1.0
  • NGINX_LISTEN_PORT: Listen on a port other than 80, you can also change the default user and set to nginx --user nginx (see #224 and #234). (default: 80 when the user is root, 8080 otherwise). Since 2.2.0
  • NGINX_RESOLVER: Add resolver directive to the nginx configuration for dynamic dns resolving. The value when you are using a docker network is 127.0.0.11, you can set a custom DNS server too with a valid time. This is not needed when you are using kubernetes. (see #333 and #339). (default: ``). Since 2.5.5
  • DEFAULT_REGISTRIES: List of comma separated registry URLs (e.g http://registry.example.com,http://registry:5000), available only when SINGLE_REGISTRY=false (see #219). (default: ). Since 2.1.0
  • READ_ONLY_REGISTRIES: Deactivate dialog for remove and add new registries, available only when SINGLE_REGISTRY=false (see #219). (default: false). Since 2.1.0
  • SHOW_CATALOG_NB_TAGS: Show number of tags per images on catalog page and hide images with 0 tags. This will produce + nb images requests, not recommended on large registries (see #161 and #239). (default: false). Since 2.2.0
  • HISTORY_CUSTOM_LABELS: Expose custom labels in history page, custom labels will be processed like maintainer label (see #160 and #240). Since 2.2.0
  • USE_CONTROL_CACHE_HEADER: Use Control-Cache header and set to no-store, no-cache. This will avoid some issues on multi-arch images (see #260 and #265). This option requires registry configuration: Access-Control-Allow-Headers with Cache-Control. (default: false). Since 2.3.0
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号