Menu Close

Docker国内镜像加速无效的原因和解决办法

今天在国内的VPS上运行一个docker项目,50M的镜像文件十几分钟才下载了几兆,惨不忍睹。于是把各种加速方式折腾了一番,最终解决了docker国内镜像加速无效的问题。

本文简要介绍一下docker国内镜像加速无效的原因,并给出解决办法,希望能帮到遇到同样问题的网友。

docker国内镜像加速无效

相信不少网友和本人一样,Linux服务器上遇到访问外网资源慢,首先想到利用proxychains工具加速。遗憾的是,proxychains对docker无效,原因是:docker分服务端和客户端两部分,我们平时用的docker命令是客户端工具,真正干活的是服务端dockerd。所以,下载和构建镜像由服务端dockerd来做,proxychains docker这种做法自然就没效果了。

proxychains这种方式行不通,退而求其次用国内镜像。遗憾的是,根据网上许多教程(例如知名的 镜像加速器- Docker —— 从入门到实践),配置好网易和163的国内镜像后,下载同样巨慢,说明配置的加速镜像没起作用。

使用 journalctl -xe --no-pager -u docker 查看日志,发现如下错误提示:

level=info msg="Attempting next endpoint for pull after error: manifest unknown: manifest unknown"

日志中没具体说明是哪个endpoint有问题,但估计是配置的加速镜像有问题,于是回退到默认的docker hub下载,导致同样很慢。

根据这条信息,尝试访问百度docker镜像,发现无法打开;网易的docker镜像能打开,但没有返回空内容。根据这两个信息,猜测docker国内镜像加速无效的原因是国内公开的镜像地址失效导致

docker国内镜像加速无效的解决办法

以上原因仅是猜测,需要验证想法是否正确。

既然公开的加速镜像失效了,那就用私有的。阿里云 的docker镜像加速地址每个用户不一样,滥用的可能性少,而且官方后台提供,应该不会失效。于是就用阿里云的地址来验证一下上面的想法吧。

阿里云docker镜像加速地址获取方法:登录容器镜像服务控制台,在左侧导航栏选择镜像工具 > 镜像加速器,就可以看到独立分配的加速器地址(期间会让你设置Registry密码,不用管,直接关掉就行了):

阿里云docker镜像加速地址
阿里云docker镜像加速地址

有了国内镜像加速地址后,接着配置到docker中:编辑 /etc/docker/daemon.json 文件(不存在则新建),填入下面的内容:

{
    "registry-mirrors": [
        "阿里云后台复制的加速地址"
     ]
}            

然后重启docker:systemctl restart docker

除了配置daemon.json的方式,也可以配置DOCKER_OPTS、修改docker启动命令等方式配置加速镜像,具体参考阿里云后台的文档

查看docker信息:docker info,应该能看到如下输出:

查看docker信息

再次运行docker build/pull等命令,这一次,很快就将所需的镜像下载下来,这表明配置的加速地址已经生效。

通过ss -ntp | grep dockerd命令,能看到dockerd连接的是阿里云国内IP,这也侧面验证了正在使用阿里云加速地址

总结

通过配置docker国内镜像的方式能加速镜像下载,如果遇到不生效的情况,请检查一下加速地址是否仍有效。

参考

  1. 镜像加速器- Docker —— 从入门到实践
  2. 官方镜像加速- 容器镜像服务ACR – 阿里云 – 阿里云- 帮助文档

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注