使用以下compose配置即可,joxit/docker-registry-ui容器可选择是否部署,仅用来查看已缓存的image

核心配置基本在环境变量以及配置文档内,部署完成以后通过端口转发等暴露到外部网络

Docker运行 docker run --rm --entrypoint htpasswd registry:2.8.2 -Bbn your_username your_password > auth/htpasswd

生成的 htpasswd文件需要放入容器内部的 /auth文件夹内,以供registry引用并启用账密验证

外部执行docker pull之前先通过登录验证 docker login registry.exam.com,账密为上述htpasswd命令执行填入的 your_usernameyour_password,通过后就能 docker pull registry.exam.com:49998/hello-world自动通过 http://192.168.9.2:7893拉取镜像

Docker-compose.yaml
version: '3.3'
services:
  registry:
    image: registry:2.8.2
    container_name: registry
    restart: unless-stopped
    ports:
      - 49998:49998
    volumes:
      - /volume1/docker/registry/auth:/auth
      - /volume1/docker/registry:/var/lib/registry
      - /volume1/docker/registry/config.yml:/etc/docker/registry/config.yml
    environment:
      - TZ=Asia/Shanghai
      - HTTPS_PROXY=http://192.168.9.2:7893 # 代理服务器, 自行解决
      - HTTP_PROXY=http://192.168.9.2:7893 # 代理服务器, 自行解决
      - "REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io" # 官方镜像仓库URL
      - "REGISTRY_PROXY_USERNAME=docker_hub_user_name" # 官方HUB登录用户名
      - "REGISTRY_PROXY_PASSWORD=docker_hub_user_password" # 官方HUB登录密码, 如果开启了2FA则改为Access Token
      - REGISTRY_HTTP_ADDR=0.0.0.0:49998 # 监听地址, 后续外部访问时需要带上端口
      - REGISTRY_STORAGE_DELETE_ENABLED:true
      - "REGISTRY_AUTH=htpasswd" # 使用基本的htpasswd文件校验, 避免被公网滥用
      - "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd #
    network_mode: bridge

  registry-ui:
    image: joxit/docker-registry-ui:2
    container_name: registry-ui
    restart: unless-stopped
    ports:
      - 49999:80
    environment:
      - TZ=Asia/Shanghai
      - SINGLE_REGISTRY=true
      - REGISTRY_TITLE=Docker Registry UI
      - DELETE_IMAGES=true
      - SHOW_CONTENT_DIGEST=true
      - NGINX_PROXY_PASS_URL=http://192.168.9.11:49998
      - SHOW_CATALOG_NB_TAGS=true
      - CATALOG_MIN_BRANCHES=1
      - CATALOG_MAX_BRANCHES=1
      - TAGLIST_PAGE_SIZE=100
      - REGISTRY_SECURED=true
      - CATALOG_ELEMENTS_LIMIT=1000
    network_mode: bridge

networks:
  bridge:
    external: true

config.yml

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      dryrun: false
      interval: 1m
http:
  addr: 49998
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
    Access-Control-Expose-Headers: ['Docker-Content-Digest']
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
proxy:
  remoteurl: https://registry-1.docker.io
  username: docker_hub_user_name # 官方HUB登录用户名
  password: docker_hub_user_password # 官方HUB登录密码, 如果开启了2FA则改为Access Token
最后修改:2026 年 08 月 06 日
个人分享,随意打赏