今天在国内的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中:编辑 /etc/docker/daemon.json
文件(不存在则新建),填入下面的内容:
{
"registry-mirrors": [
"阿里云后台复制的加速地址"
]
}
然后重启docker:systemctl restart docker
。
除了配置daemon.json的方式,也可以配置DOCKER_OPTS、修改docker启动命令等方式配置加速镜像,具体参考阿里云后台的文档
查看docker信息:docker info
,应该能看到如下输出:
再次运行docker build/pull
等命令,这一次,很快就将所需的镜像下载下来,这表明配置的加速地址已经生效。
通过ss -ntp | grep dockerd
命令,能看到dockerd连接的是阿里云国内IP,这也侧面验证了正在使用阿里云加速地址
总结
通过配置docker国内镜像的方式能加速镜像下载,如果遇到不生效的情况,请检查一下加速地址是否仍有效。