由于一些原因,Docker 官方进行无法正常拉取。
省事可以用一些免费公开的镜像加速服务,比如这个仓库收集的一些地址。
https://github.com/dongyubin/DockerHub
如果对于隐私,安全,稳定性要求高,也可以自建一个 Docker 镜像代理服务。
思路
利用 Docker Registry 的 pull through 模式,我们在国外的服务器(VPS)上部署 registry:2 服务。pull through 模式功能是如果当前registry不存在镜像,则从上游拉取,进行缓存。
接着我们通过 Caddy(当然也可以换成Nginx) 转发流量到 registry。
如图所示:

需要准备的
- 需要一个域名
- 一台国外服务器(VPS)
部署
代码已经写好了,放在仓库:https://github.com/byteroycai/docker-registry-proxy
下载下来放到服务器上备用。
1.初始化
域名配置
-
域名新增一条A记录指向服务器
-
更改caddy域名配置
在初始化之前,需要将 caddy/Caddyfile 中的 dm.teslamate.net 域名改为自己的。
dm.teslamate.net {
reverse_proxy registry:5000
log {
output file /var/log/caddy/access.log
format console
}
}
自己选择一个目录安装,默认缓存10G,请确保磁盘容量够。
make init

2. 启动服务
需要先安装好 Docker 服务。
make up

看下容器启动情况

3. 维护选项
手动清理缓存
make cleanup
设置每日自动清理
make cron
停止服务
make down
验证
这里使用国内阿里云服务器验证。
vim /etc/docker/daemon.json
如文件不存在,自己手动建一个。
{
"registry-mirrors": ["https://dm.teslamate.net"]
}
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

至此,大功告成!
还有一个安全细节,由于 registry-mirrors 是公开的,如果你不想公开被别人使用,可以加个IP白名单做限制。
在服务器的安全组或者 Caddy 配置文件里。
示例文件:
dm.teslamate.net {
@allowed_ips {
remote_ip 192.168.1.0/24
remote_ip 203.0.113.5
}
handle @allowed_ips {
reverse_proxy registry:5000
}
handle {
respond "Access Denied" 403
}
log {
output file /var/log/caddy/access.log
format console
}
}