最近因网络管理的加强,导致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服务器,点击新增
名称随意,自己能分辨出就行,我这里就叫做docker,网址输入刚刚复制的阿里云加速器地址,用户名密码均为空,点击测试,出现绿色小勾说明测试成功,点击应用,即可看到刚刚添加的Registry服务器。
使用新添加的镜像站拉取镜像
点击“镜像”→提取
选择 Regstry 服务器
比如拉取 nginx 镜像最新版
等待片刻即可拉取完整
群晖NAS
打开docker-注册表,选择上方设置,选中docker hub点击编辑,勾选启用注册表镜像,填写阿里云加速器地址确定,重启docker即可正常使用。