前言

国内docker源镜像仓库都被上面勒令封锁了,我不清楚是出于怎样的缘故,但这无疑带来了docker拉取的不便,请容我稍稍抱怨一下

记录一下对此的解决方法

方案一

使用某国内厂商的私有源仓库,你可以在某厂商注册私有镜像源然后通过一些拉取较快的国外服务器拉取后再上传到私有国内镜像。前提是你有国外主机

命令大概是

某国外vps主机(拉取源较快)

docker pull nginx
docker tag nginx <私有源地址>/<私有源空间名>/<自定义镜像名称>:latest
docker login <私有源地址>
# 这里会让你输入你的私有源账号和密码
docker push <私有源地址>/<私有源空间名>/<自定义镜像名称>:latest

国内主机(拉取较慢)

docker login <私有源地址>
# 这里会让你输入你的私有源账号和密码
docker pull <私有源地址>/<私有源空间名>/<自定义镜像名称>:latest

这样就能速度拉满了,而且可以存一些自己构建的不可描述镜像,比如我的某魔法一键部署docker

方案二

使用代理,前提是你有国外主机

如果是systemd管理的linux服务器,则可以使用systemd设置环境变量,可以让image拉取时获得代理加速
注意,群晖6版本是synoservice管理,并不适用,群晖7据说是systemd,我并没有尝试过
/etc/systemd/system/docker.service.d/下添加以conf为后缀的文件,我的是/etc/systemd/system/docker.service.d/http-proxy.conf

mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf

写入以下内容

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"

记得修改成你的代理端口

之后就是经典的

systemctl daemon-reload
systemctl restart docker

之后验证是否生效,可以随便拉取一个镜像看代理日志是否出现docker相关的镜像源url

方案三

serverless方案

cloudflare worker代理镜像源

优点:不需要服务器,不需要额外花销
缺点:速度完全取决于被玩坏的cloudflare cdn,大多数情况下很慢

推荐相关项目

render部署docker镜像的代理

render似乎最近更新了免费额度,我是用的这种,速度很快,而且在render的免费额度中,免费额度好像是100G,一般来说够用了,但需要绑卡(后面不会计费,选择免费即可),我用的虚拟卡,就不推荐哪家了

免费额度

首先你需要注册官方镜像dockerhub,然后同上面方案一的命令拉取镜像后推送到官方镜像,最后在render里面选择私有镜像即可部署(不能直接部署,因为docker代理镜像源被拉黑了

我用的是mirhub/mirror-hub,你可以使用这个仓库的

不管你用的哪种方法之后在绑定域名,创建/etc/docker/daemon.json文件,填入以下内容

{
"registry-mirrors": [
"<你的docker镜像代理url>"
],
}

然后保存后重启docker即可

systemctl daemon-reload
systemctl restart docker

重启后可以用docker info查看是否生效

是否生效

显示的是你daemon.json中的url就是生效了,之后正常docker pull就行

总结

至此用三种方法解决了docker代理拉取很慢的问题,可以愉快的使用docker了