智能镜像源路由服务 —— 根据客户端 IP 的地理位置和 ISP 信息,自动 307 重定向到最优的镜像站。
支持 APT 软件源和 Docker Registry 镜像,覆盖国内主流云厂商内网源与高校/公网源。
客户端请求 → 解析客户端 IP → 查询 IP 归属(ISP/地域)→ 匹配路由规则 → 307 重定向到最优镜像
APT 软件源:Debian、Ubuntu、CentOS、Alpine、Arch Linux、Fedora、openEuler 等 20+ 发行版
Docker Registry:
| Registry | 说明 |
|---|---|
| Docker Hub | 默认 registry |
| gcr.io | Google Container Registry |
| ghcr.io | GitHub Container Registry |
| registry.k8s.io | Kubernetes |
| quay.io | Red Hat Quay |
| mcr.microsoft.com | Microsoft |
| nvcr.io | NVIDIA |
| docker.elastic.co | Elastic |
docker run -d \
--name mirrors \
-p 8080:8080 \
-v ./config.json:/config.json \
docker.cnb.cool/bring/tools/mirrors:latest
内置的 generate 工具会探测所有镜像源的可用性,自动生成配置:
go run ./cmd/generate -configs configs -output config.json
该工具会:
configs/ 目录下的所有 YAML 探测配置config.json 供服务加载将 APT sources 中的域名替换为本服务地址即可,路径中第一段为发行版名:
# 假设服务部署在 mirrors.bring.host
deb http://mirrors.bring.host/debian bookworm main contrib non-free
deb http://mirrors.bring.host/ubuntu noble main restricted universe multiverse
配置为 Docker registry mirror:
{
"registry-mirrors": ["http://mirrors.bring.host"]
}
拉取其他 registry 的镜像时,在 image 路径前加上 registry 域名:
# Docker Hub
docker pull mirrors.bring.host/library/nginx:latest
# ghcr.io
docker pull mirrors.bring.host/ghcr.io/owner/image:tag
# gcr.io
docker pull mirrors.bring.host/gcr.io/project/image:tag
| 变量 | 默认值 | 说明 |
|---|---|---|
LISTEN_ADDR | :8080 | 监听地址 |
CONFIG_FILE | config.json | 本地配置文件路径 |
CONFIG_API_URL | - | 远程配置 API 地址(优先于本地文件) |
CONFIG_API_AUTH | - | 远程配置 API 的 Authorization 头 |
CONFIG_RELOAD_INTERVAL | 5m | 配置热重载间隔 |
IP_API_URL | https://api.bring.cool/ip/ | IP 归属查询 API |
IP_API_AUTH | - | IP API 的 Authorization 头 |
在 configs/settings.yml 中定义路由规则,支持按 ISP、CIDR、地域匹配:
rules:
- name: aliyun-internal
match:
isp: [阿里云]
targets:
apt: aliyun
- name: tencent-internal
match:
isp: [腾讯云]
targets:
apt: tencent
docker.hub: tencent-internal
defaults:
apt: tencent
docker: 1ms
规则按顺序求值,首个匹配的规则生效。所有 match 条件为 AND 逻辑。
| 路径 | 说明 |
|---|---|
GET /health | 健康检查 |
ANY /v2/* | Docker Registry v2 API 代理 |
GET /<distro>/* | APT 镜像重定向 |
# 本地构建
go build -o mirrors .
# Docker 构建
docker build -t mirrors .
MIT