
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://img.shields.io/github/stars/joxit/docker-registry-ui.svg?logo=github&maxAge=86400](https://github.com/Joxit/docker-registry-ui/stargazers) https://img.shields.io/docker/pulls/joxit/docker-registry-ui.svg?maxAge=86400](https://hub.docker.com/r/joxit/docker-registry-ui) https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/joxit](https://artifacthub.io/packages/search?repo=joxit) https://img.shields.io/github/release/joxit/docker-registry-ui?display_name=tag&sort=semver](https://github.com/Joxit/docker-registry-ui/releases)
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 https://github.com/Joxit/docker-registry-ui/wiki/Migrating-from-1.x-to-2.x or https://github.com/Joxit/docker-registry-ui/blob/8fe3adf***d1316cb57628ebe86a392a703d90/README.md
This web user interface uses https://github.com/Riot/riot the react-like user interface micro-library and https://github.com/kysonic/riot-mui components.
If you like my work and want to support it, don't hesitate to https://github.com/***/Joxit.
latest: image with the latest release of Docker Registry UI based on nginx:alpinelatest-debian: image with the latest release of Docker Registry UI based on nginx:debianmain, master: image with the beta version of Docker Registry UI based on nginx:alpinemain-debian, master-debian: image with the beta version of Docker Registry UI based on nginx:debian2: 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!https://raw.github.com/Joxit/docker-registry-ui/main/docker-registry-ui.gif "Preview of Docker Registry UI"
ALT + Click on the indeterminate checkbox (see https://github.com/Joxit/docker-registry-ui/issues/80 and https://github.com/Joxit/docker-registry-ui/pull/81). Since 1.2.1Shift + Click on the first tag then Shift + Click on the second tag (see https://github.com/Joxit/docker-registry-ui/pull/287). Since 2.4.0SINGLE_REGISTRY=false.
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.CRTL + F or F3. When the search bar is already focused, the shortcut will fallback to the default behavior (see https://github.com/Joxit/docker-registry-ui/issues/213). Since 2.1.0sha256:).Checkout all options in Available options section.
SINGLE_REGISTRY=false and SINGLE_REGISTRY=true options ?
SINGLE_REGISTRY is set to false, a menu appears on the interface allowing you to dynamically change docker registry URLs.docker images ?
Host is set to $http_host ?
NGINX_PROXY_PASS_URL or configure a nginx/apache/haproxy in front of your registry that returns 200 on each OPTIONS requests. (see https://github.com/Joxit/docker-registry-ui/issues/104, https://github.com/Joxit/docker-registry-ui/issues/204, https://github.com/Joxit/docker-registry-ui/issues/207, https://github.com/Joxit/docker-registry-ui/issues/214, https://github.com/Joxit/docker-registry-ui/issues/266).registry garbage-collect config.yml or docker exec registry registry garbage-collect config.yml. (see https://github.com/Joxit/docker-registry-ui/issues/77, https://github.com/Joxit/docker-registry-ui/issues/147)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.nginx user with the option --user nginx, this will also update the listen port to 8080 (see https://github.com/Joxit/docker-registry-ui/issues/224 and https://github.com/Joxit/docker-registry-ui/pull/234).library/* images ?
pagination number invalid ?
REGISTRY_CATALOG_MAXENTRIES with your max value and check the issue https://github.com/Joxit/docker-registry-ui/issues/306.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_RESOLVER and set to 127.0.0.11.Need more informations ? Try my https://github.com/Joxit/docker-registry-ui/tree/main/examples or open an issue.
You can run the container with the unprivileged user nginx, see the discussion https://github.com/Joxit/docker-registry-ui/issues/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 https://github.com/Joxit/docker-registry-ui/issues/28 and https://github.com/Joxit/docker-registry-ui/issues/32). Since 0.3.4PULL_URL: Set a custom url when you copy the docker pull command (see https://github.com/Joxit/docker-registry-ui/issues/71). (default: value derived from REGISTRY_URL). Since 1.1.0DELETE_IMAGES: Set if we can delete images from the UI. (default: false)SHOW_CONTENT_DIGEST: Show/Hide content digest in docker tag list (see https://github.com/Joxit/docker-registry-ui/issues/126 and https://github.com/Joxit/docker-registry-ui/pull/131). (default: false). Since 1.4.9CATALOG_ELEMENTS_LIMIT: Limit the number of elements in the catalog page (see https://github.com/Joxit/docker-registry-ui/issues/39, https://github.com/Joxit/docker-registry-ui/pull/127, https://github.com/Joxit/docker-registry-ui/pull/132) and https://github.com/Joxit/docker-registry-ui/issues/306. (default: 1000). Since 1.4.9SINGLE_REGISTRY: Remove the menu that show the dialogs to add, remove and change the endpoint of your docker registry. (default: false). Since 2.0.0NGINX_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.0NGINX_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 https://github.com/Joxit/docker-registry-ui/pull/89). Since 1.2.3NGINX_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 https://github.com/Joxit/docker-registry-ui/issues/206). Since 2.1.0NGINX_LISTEN_PORT: Listen on a port other than 80, you can also change the default user and set to nginx --user nginx (see https://github.com/Joxit/docker-registry-ui/issues/224 and https://github.com/Joxit/docker-registry-ui/pull/234). (default: 80 when the user is root, 8080 otherwise). Since 2.2.0NGINX_RESOLVER: Add http://nginx.org/en/docs/http/ngx_http_core_module.html#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 https://github.com/Joxit/docker-registry-ui/issues/333 and https://github.com/Joxit/docker-registry-ui/issues/339). (default: ``). Since 2.5.5DEFAULT_REGISTRIES: List of comma separated registry URLs (e.g http://registry.example.com,http://registry:5000), available only when SINGLE_REGISTRY=false (see https://github.com/Joxit/docker-registry-ui/pull/219). (default: ). Since 2.1.0READ_ONLY_REGISTRIES: Deactivate dialog for remove and add new registries, available only when SINGLE_REGISTRY=false (see https://github.com/Joxit/docker-registry-ui/pull/219). (default: false). Since 2.1.0SHOW_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 https://github.com/Joxit/docker-registry-ui/issues/161 and https://github.com/Joxit/docker-registry-ui/pull/239). (default: false). Since 2.2.0HISTORY_CUSTOM_LABELS: Expose custom labels in history page, custom labels will be processed like maintainer label (see https://github.com/Joxit/docker-registry-ui/issues/160 and https://github.com/Joxit/docker-registry-ui/pull/240). Since 2.2.0USE_CONTROL_CACHE_HEADER: Use Control-Cache header and set to no-store, no-cache. This will avoid some issues on multi-arch images (see https://github.com/Joxit/docker-registry-ui/issues/260 and https://github.com/Joxit/docker-registry-ui/pull/265). This option requires registry configuration: Access-Control-Allow-Headers with Cache-Control. (default: false). Since 2.3.0THEME: Chose your default theme, could be dark, light or auto (see https://github.com/Joxit/docker-registry-ui/pull/283). When auto is selected, you will have a switch to manually change from light to dark and vice-versa (see https://github.com/Joxit/docker-registry-ui/pull/291). (default: auto). Since 2.4.0THEME_*: See table in Theme options section (see https://github.com/Joxit/docker-registry-ui/pull/283). Since 2.4.0TAGLIST_ORDER: Set the default order for the taglist page, could be num-asc;alpha-asc, num-desc;alpha-asc, num-asc;alpha-desc, num-desc;alpha-desc, alpha-asc;num-asc, alpha-asc;num-desc, alpha-desc;num-asc or alpha-desc;num-desc (see https://github.com/Joxit/docker-registry-ui/pull/307). (default: alpha-asc;num-desc). Since 2.5.0CATALOG_DEFAULT_EXPANDED: Expand by default all repositories in catalog (see https://github.com/Joxit/docker-registry-ui/issues/302). (default: false). Since 2.5.0CATALOG_MIN_BRANCHES: Set the minimum repository/namespace to expand (e.g. joxit/docker-registry-ui joxit/ is the repository/namespace). Can be 0 to disable branching. (see https://github.com/Joxit/docker-registry-ui/pull/319). (default: 1). Since 2.5.0CATALOG_MAX_BRANCHES: Set the maximum repository/namespace to expand (e.g. joxit/docker-registry-ui joxit/ is the repository/namespace). Can be 0 to disable branching. (see https://github.com/Joxit/docker-registry-ui/pull/319). (default: 1). Since 2.5.0TAGLIST_PAGE_SIZE: Set the number of tags to display in one page. (default: 100). Since 2.5.0REGISTRY_SECURED: By default, the UI will check on every requests if your registry is secured or not (you will see 401 responses in your console). Set to true if your registry uses Basic Authentication and divide by two the number of call to your registry. (default false). Since 2.5.0SHOW_TAG_HISTORY: Whether to show the tag history feature or not. Allows to simplify the user interface by hiding it form the tag list if set to false. (default: true).
There are some examples with https://docs.docker.com/compose/ and docker-registry-ui as proxy https://github.com/Joxit/docker-registry-ui/tree/main/examples/ui-as-proxy/ or docker-registry-ui as standalone https://github.com/Joxit/docker-registry-ui/tree/main/examples/ui-as-standalone/.This featureswas added to version 2.4.0. See more about this in https://github.com/Joxit/docker-registry-ui/pull/283.
| Environment variable | light theme value | dark theme value |
|---|---|---|
THEME_PRIMARY_TEXT | #25313b | #98a8bd |
THEME_NEUTRAL_TEXT | #777777 | #6d7fab |
THEME_BACKGROUND | #ffffff | #22272e |
THEME_HOVER_BACKGROUND | #eeeeee | #343a4b |
THEME_ACCENT_TEXT | #5f7796 | #5c88ff |
THEME_HEADER_TEXT | #ffffff | #ffffff |
THEME_HEADER_ACCENT_TEXT | #7b9ac2 | #7ea1ff |
THEME_HEADER_BACKGROUND | #25313b | #333a45 |
THEME_FOOTER_TEXT | #ffffff | #ffffff |
THEME_FOOTER_NEUTRAL_TEXT | #adbacd | #98afcf |
THEME_FOOTER_BACKGROUND | #344251 | #344251 |
Here is a simple usage of Docker Registry UI with Docker Registry Server using docker-compose. This example should work for most of your use case and your UI will be on the same domain as you registry.
ymlversion: '3.8' services: registry-ui: image: joxit/docker-registry-ui:main restart: always ports: - 80:80 environment: - SINGLE_REGISTRY=true - REGISTRY_TITLE=Docker Registry UI - DELETE_IMAGES=true - SHOW_CONTENT_DIGEST=true - NGINX_PROXY_PASS_URL=http://registry-server:5000 - SHOW_CATALOG_NB_TAGS=true - CATALOG_MIN_BRANCHES=1 - CATALOG_MAX_BRANCHES=1 - TAGLIST_PAGE_SIZE=100 - REGISTRY_SECURED=false - CATALOG_ELEMENTS_LIMIT=1000 container_name: registry-ui registry-server: image: registry:2.8.2 restart: always environment: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://registry.example.com]' REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]' REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]' REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]' REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]' REGISTRY_STORAGE_DELETE_ENABLED: 'true' volumes: - ./registry/data:/var/lib/registry container_name: registry-server
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 (you must add the protocol http/https and the port when not default 80/443):
ymlhttp: headers: Access-Control-Allow-Origin: ['http://registry.example.com'] Access-Control-Allow-Credentials: [true] Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS'] # Optional
An alternative for CORS issues is a plugin on your browser, more info https://github.com/Joxit/docker-registry-ui/issues/25#issuecomment-621104846 (thank you https://github.com/xmontero).
:warning: If you are using credential and still having issues, please read the the line about preflight requests and the bug in docker registry server in the FAQ before posting any issues.
For deleting images, you need to activate the delete feature in the UI with DELETE_IMAGES=true and in your registry:
ymlstorage: delete: enabled: true
And you need to add these HEADERS:
ymlhttp: headers: Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control'] Access-Control-Expose-Headers: ['Docker-Content-Digest']
Example of docker registry configuration file:
ymlversion: 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', 'Cache-Control'] 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 (not updated).
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 joxit/docker-registry-ui 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: