一分钟解决docker镜像拉取失败/缓慢问题

最近因网络问题,导致docker突然不能正常拉取镜像,提示“error response from daemon”,群晖提示“查询注册表失败”,威联通提示“获取版本失败”,或者哪怕能拉取速度也非常缓慢,只有几k每秒的速度,这里就彻底解决镜像拉取失败/缓慢问题。

以下方法请根据实际情况选择其中一种

更改dns

可以先尝试更改公共dns,目前部分地方运营商存在dns劫持,可以尝试把dns修改为114.114.114.114等公共dns,或者自行搭建dns服务器防止劫持,自建教程可以查看往期文章《搭建并配置一个属于自己的dns去广告服务器》。

注:修改dns后请重启或者刷新缓存再查看是否正常

更改hosts

此方法适用于公共dns也存在劫持,且不想自建dns服务器,这时候可以通过修改系统hosts文件指定域名解析ip。

以Ubuntu为例

su root
nano /etc/hosts

添加hosts

108.160.166.61 registry.hub.docker.com
156.233.67.243 hub.docker.com

之后按住ctrl+o键保存重启系统生效。

更换国内镜像仓库

1.选择加速地址

修改成国内镜像地址就能享受到飞一般的速度,但有一个问题,部分站点镜像不全或者镜像比较老,建议使用多个镜像站。

https://<your_code>.mirror.aliyuncs.com    #阿里云
https://hub-mirror.c.163.com               #网易云
https://dockerproxy.com                    #代理站
https://mirror.baidubce.com                #百度云
https://docker.nju.edu.cn                  #南京大学

这里我以阿里云(阿里云是官方镜像加速,实测是这些中最好的)为例。

如果没有阿里云账号先去https://www.aliyun.com/注册一个。

登录阿里云,选择容器镜像服务https://cr.console.aliyun.com/,点击镜像工具-镜像工具-镜像加速器,复制加速器地址。

注:每个账号加速地址并不相同

2.修改docker镜像地址

Ubuntu/Centos


sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx(自己的加速地址).mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

威联通nas

打开container station-属性-Registry服务器,点击新增

名称随意,自己能分辨出就行,我这里就叫做docker,网址输入刚刚复制的阿里云加速器地址,用户名密码均为空,点击测试,出现绿色小勾说明测试成功,点击应用,即可看到刚刚添加的Registry服务器。

假设我现在需要部署iyuuplus这个docker,先在创建中搜索到此docker镜像名称,在这里镜像名称就是iyuucn/iyuuplus。

复制名称,转到镜像文件,点击提取,选择刚刚的Registry服务器,填入镜像名称,填入版本(一般除非指定版本,否则都是latest),点击提取。

稍等片刻即可看到镜像已经提取完成。

注:此时映像名称变成了Registry服务器地址+原映像名称

之后点击旁边的加号即可正常部署docker。

群晖nas

打开docker-注册表,选择上方设置,选中docker hub点击编辑,勾选启用注册表镜像,填写阿里云加速器地址确定,重启docker即可正常使用。

使用代理

使用代理来加速映像下载,此部分不做介绍。

THE END