一个让你 Docker Pull 更快的加速器。
OCI Puller 是一个高性能的 Docker 镜像拉取代理。它通过将 Docker 客户端的单线程下载请求转换为后端的多线程并行下载,并结合磁盘缓存和“边下边播”技术,显著提升了镜像拉取速度,特别是在网络环境受限或跨地域拉取时。
- 多线程拉取: 突破单线程限制,充分利用带宽。
- 智能缓存: 避免重复下载,支持自动清理。
- 流式响应: 无需等待全部下载完成即可开始向客户端返回数据。
- 多上游调度: 同一 Host 可配置多个上游 URL,当前支持请求级轮询与失败切换。
- 自定义 Registry: 不限制可以代理的 Registry,用户自行添加
- 自定义域名: 访问域名不做限制,用户自行选择反向代理
这个工具强烈建议在局域网/本地环境中使用
配置文件部分参阅 配置文件
当前多上游能力边界如下:
- 同一
host下可配置多个urls - 新请求会按轮询顺序选择首个上游
- 当首个上游在请求建立阶段失败时,会在同一请求内继续尝试后续上游
- 目前还不支持健康检查、加权分流、跨请求粘性等更完整的调度策略
强烈推荐使用 Docker Compose 部署
services:
oci-puller:
image: ghcr.io/chisaato/oci-puller:main
restart: always
environment:
- OCI_LOG_LEVEL=debug
volumes:
- ./config.yaml:/config.yaml:ro
- ./data:/data
ports:
- "9800:9800"然后下面说说反向代理. 核心思路就是控制发送到 oci-puller 的 Host 头. 下面给出一些常见反向代理的配置片段.
而且 Docker Registry 要求默认 TLS 访问,所以你得自己解决一下证书问题,当然配合 ACME 这很简单,这里就不展开了.
最后就是解析,既然是本地环境那各位选取自己喜欢的方法就行.
你问我多个镜像站怎么办? 可以继续用多个域名分别映射不同 registry;如果同一个 registry 有多个可用上游,也可以在同一条
registries.urls里配置多个 URL。
server {
listen 443 ssl;
server_name docker.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:9800;
# 或者是在容器内使用域名访问
# proxy_pass http://oci-puller:9800;
proxy_set_header Host $host;
}
}docker.example.com {
reverse_proxy 127.0.0.1:9800 {
header_up Host {host}
}
# 或者是在容器内使用域名访问
# reverse_proxy oci-puller:9800 {
# header_up Host {host}
# }
}http:
routers:
oci-puller:
rule: Host(`docker.example.com`)
service: oci-puller
tls: {}
services:
oci-puller:
loadBalancer:
servers:
# 既然你都用 Traefik 我假定你大概率是在容器里跑的
- url: "http://oci-puller:9800"Docker 可以配置多个镜像站,可以将 oci-puller 提供的地址作为第一位,万一失效了还能继续尝试其他站点
{
"registry-mirrors": ["https://docker.example.com", "https://xxxmirror.com"]
}本项目采用 GPLv3 协议开源。