docker换源不生效的原因以及解决方案
作者:一颗小小的石头.
文章讲述了如何更换Docker源以提高镜像拉取速度,但由于一些历史原因,官方和一些自建加速源可能无法完全满足需求,作者通过监控Docker服务状态并找到一个可靠的国内加速源链接,最终解决了Docker源不生效的问题
docker换源不生效
标题背景
网上一大堆教程告诉你如何换源,怎么执行命令,但发现换源之后,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
后,重新尝试发现拉取镜像加速的概率大了很多
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。