标题背景
网上一大堆教程告诉你如何换源,怎么执行命令,但发现换源之后,docker pull 仍然拉不下来。云里雾里不知道什么原因
历史操作
- 以阿里云镜像加速为例,它提供了个人维度的加速链接,在这里可以看到 容器镜像服务
- 按照上面的操作方式,
vim /etc/docker/daemon.json
将个人加速链接配置进去,重启服务 - 发现 docker pull golang:1.22-alpine 依然报错,说明没有走到加速镜像
Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
- 怀疑缓存导致,清理缓存
docker system prune -a
- 依然无效后,陷入死锁,在尝试更换了几个源之后没有明显解决。
原因
因为一些历史原因,从24年6月,docker 官方收紧了cn地区的镜像服务,同时,一些自建的镜像加速公有云也并没有完全收录所有镜像开放使用,以上面的阿里云链接为例
它引导用户使用制品中心中的镜像,但那里的镜像种类和版本,与docker官方的几乎不相同,例如想要获取 golang 镜像,官方的是类似 golang:1.22-alpine ,但制品中心最新的是 FROM anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/golang:1.19.4-8.6
看到落后了好几个版本。但这个确实能很快速的拉取下来
最终方案
由上可知,根本原因还是源本身的问题,还是需要找到可靠稳定的国内加速源链接,这里找到一个docker服务状态监控网站,找到镜像加速一栏,将其加入到/etc/docker/daemon.json
后,重新尝试发现拉取镜像加速的概率大了很多