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

更改dns

可以先尝试更改公共dns,目前部分地方运营商存在dns劫持,可以尝试把dns修改为114.114.114.114或者223.5.5.5等公共dns,亦或是自行搭建 DNS 解析,不过不再此文范围之内。

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

更改hosts

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

以威联通 QTS 为例

nano /etc/hosts

添加hosts

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

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

怎么找 IP?

https://tool.chinaz.com/dns?type=a&host=hub.docker.com

更换国内镜像仓库

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

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

为什么阿里云有个自定义前缀<your_code>?,因为阿里云要注册后才能获取地址,不过实测阿里云最好用。

注册阿里云

如果没有阿里云账号先去https://www.aliyun.com/注册一个。
登录阿里云,选择容器镜像服务https://cr.console.aliyun.com/,点击镜像工具-镜像工具-镜像加速器,复制加速器地址。


阿里云镜像加速阿里云镜像加速

修改docker镜像地址

CentOS/Debian/Ubuntu 等传统 Linux 系统

这些系统的docker配置文件路径一般都是 /etc/docker/daemon.json,执行下面的命令添加镜像地址(https://dockerproxy.com可以替换为你访问速度更快的镜像)。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dockerproxy.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

威联通 NAS

打开“Container Station 容器工作站”Container Station 容器工作站属性→Registry服务器,点击新增

Registry服务器.pngRegistry服务器.png

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

使用新添加的镜像站拉取镜像

点击“镜像”→提取
拉取镜像拉取镜像
选择 Regstry 服务器
选择 Registry 服务器选择 Registry 服务器
比如拉取 nginx 镜像最新版
拉取 Nginx 最新版拉取 Nginx 最新版
等待片刻即可拉取完整

群晖NAS

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