DianHub Logo

DianHub 使用说明

Docker 镜像代理服务 - 完整部署指南

🔧

为什么需要设置仓库?

Understanding Repository Configuration

🌍

网络访问困境

原生 Docker Hub 在国内无法直接访问。 通过配置镜像源,可以让系统正常检查容器更新,无需依赖代理即可获取最新版本信息。

为什么能拉取却不能检查更新?

镜像拉取版本检查是两个不同的功能:

  • 镜像拉取:通过 Docker Registry API 的 Blob 接口下载镜像层文件
  • 版本检查:需要调用 Manifest API 查询镜像的 Digest 值来对比版本

许多镜像源为了节省带宽和成本,只开放了 Blob 下载接口(支持拉取),但关闭了 Manifest 查询接口(不支持版本检查)。 这就是为什么有些镜像源能拉取镜像,却无法用于检查更新的原因。

🎯

为什么推荐自建服务?

公共镜像源存在以下问题:

  • 接口限制:大部分镜像源虽然支持拉取,但没有开放 API 接口调用
  • 稳定性差:类似 docker.1ms.run 虽然支持调用,但服务不稳定且有收费趋势
  • 随时失效:公共服务可能因政策或成本原因随时关闭

自建检测服务是最稳定的解决方案:完全掌控、永不失效、比代理更稳定! 只需一台能访问 Docker Hub 的 VPS,即可为自己和团队提供持久稳定的更新检测服务。

💡 建议:优先使用自建服务 > 公共服务 > 代理访问

1. 自建镜像代理服务

⚠️ 前提条件
• 一台能访问Docker Hub的VPS服务器
• 已安装Docker和Docker Compose
• 服务器防火墙已开放2022端口

快速部署

1 运行容器
docker run -d \ --name dianhub \ --restart unless-stopped \ -p 2022:8080 \ -e HOST_KEY=yjnas \ -e IMAGES_PULL=false \ yjnas/dianhub

或使用 Docker Compose

version: '3' services: dianhub: image: yjnas/dianhub container_name: dianhub restart: unless-stopped ports: - "2022:8080" environment: - HOST_KEY=yjnas - IMAGES_PULL=false
2 验证部署
# 测试服务是否正常 curl http://localhost:2022/ # 测试digest查询 curl http://localhost:2022/v2/nginx/manifests/latest
3 在 Diancup 中使用

部署完成后,在 Diancup 的仓库设置中添加你的代理地址:

your-server-ip:2022 或 docker.yourdomain.com
⚠️ 重要提示
输入地址时不要包含 http://https:// 前缀,只需输入域名和端口即可。
✅ 配置完成
Diancup 会自动使用你配置的地址进行镜像检查和拉取,新添加的地址会被优先使用。

2. 配置说明

环境变量

变量名 说明 默认值 必需
HOST_KEY 启动密钥,必须设置为 yjnas ✅ 是
PORT 容器内部监听端口 8080 ❌ 否
IMAGES_PULL 是否允许镜像拉取(true/false) false ❌ 否

工作模式对比

功能 IMAGES_PULL=false IMAGES_PULL=true
Digest查询 ✅ 支持 ✅ 支持
Manifest获取 ✅ 支持 ✅ 支持
Blob下载 ❌ 禁止 ✅ 允许
镜像拉取 ❌ 禁止 ✅ 允许
适用场景 仅检测更新 完整镜像代理

3. 常见问题

Q1: 为什么添加的地址无法使用?

A: 请检查:

  • 地址格式是否正确(不要包含 http:// 或 https://)
  • 服务器是否可以访问该地址
  • 使用 curl 命令测试地址是否可用

Q2: 配置后多久生效?

A: 配置保存后立即生效,无需重启容器。

Q3: 可以添加多少个地址?

A: 没有数量限制,但建议:

  • 检查地址:2-5 个
  • 镜像代理:3-10 个
  • 标签地址:使用默认配置即可

Q4: 如何调整地址优先级?

A: 点击"列表"按钮,在弹出窗口中拖动调整顺序。排在前面的地址优先级更高。

Q5: 删除配置后会怎样?

A: 删除后该地址将不再被使用。如果删除了所有地址,相关功能可能无法正常工作。