如何解决Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

Captain 网络 2021-03-28

Docker拉取镜像报错:

"Error response from daemon: Get https: //registry-1.docker.io/v2/: context deadline exceeded"

这个错误表明Docker客户端在尝试连接Docker Hub时超时,通常由网络连接、DNS解析或镜像源配置问题引起。以下是详细的排查和解决方案:

一、立即生效的快速解决方案
① ‌配置镜像加速器(推荐)‌
这是解决国内访问Docker Hub超时的首选方案,通过配置国内镜像源加速下载。

步骤:‌
修改配置文件‌daemon.json,如果没有则创建该文件:

sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

添加镜像源‌(选择其中一个或多个):

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://registry.docker-cn.com",
    "https://docker.xuanyuan.me"
  ]
}

重新加载配置文件并重启 Docker 服务‌:

sudo systemctl daemon-reload && systemctl restart docker

验证配置‌:

docker info | grep -A 5 "Registry Mirrors" #显示5条镜像源

宝塔面板用户‌:可直接在Docker设置中修改"加速URL",使用https://docker.1ms.run

至此,问题一般都能解决了:

如何任然报错,继续下面的步骤:

检查并修复DNS配置‌
DNS解析失败是常见原因,特别是当使用8.8.8.8等国外DNS时。

步骤:‌

查看当前DNS‌:

cat /etc/resolv.conf

修改DNS配置‌:

sudo vim /etc/resolv.conf

修改为:

nameserver 114.114.114.114
nameserver 8.8.8.8

测试DNS解析‌:

nslookup registry-1.docker.io
ping registry-1.docker.io

系统级排查与修复
① ‌网络连接检查‌
测试基础网络‌:

ping cn.bing.com  # 确认网络连通性
curl -I https://registry-1.docker.io

检查防火墙‌:

sudo ufw status  # Ubuntu
sudo firewall-cmd --list-all  # CentOS

② ‌Docker服务检查‌
查看Docker状态‌:

systemctl status docker
journalctl -u docker --no-pager -n 50  # 查看最近日志

更新Docker版本‌:

sudo apt-get update
sudo apt-get upgrade docker-ce  # Ubuntu

③ ‌代理配置(如适用)‌
如果服务器需要通过代理上网:

配置Docker代理‌:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

添加:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"

以上 proxy.example.com 改成你的代理服务器地址

重启服务‌:

sudo systemctl daemon-reload
sudo systemctl restart docker

进阶解决方案
① 手动下载镜像‌
当网络问题无法解决时,可手动下载:

在其他网络环境下载‌:

docker save -o image.tar <镜像名称:标签>

传输并导入‌:

docker load -i image.tar

② ‌修改hosts文件强制解析‌
在/etc/hosts中添加:

44.194.5.25 registry-1.docker.io

然后重启网络服务。

③ 清理Docker缓存‌

docker system prune -a  # 清理所有未使用的镜像、容器和缓存

问题排查流程图

开始
  ↓
docker pull 报错
  ↓
├─ 1. 检查网络连通性 (ping baidu.com)
│   ├─ 失败 → 修复网络连接
│   └─ 成功 → 下一步
  ↓
├─ 2. 配置镜像加速器 (修改daemon.json)
│   └─ 重启docker服务
  ↓
├─ 3. 检查DNS解析 (nslookup registry-1.docker.io)
│   ├─ 失败 → 修改/etc/resolv.conf
│   └─ 成功 → 下一步
  ↓
├─ 4. 检查防火墙设置
│   └─ 开放相关端口
  ↓
├─ 5. 查看Docker日志 (journalctl -u docker)
│   └─ 根据具体错误信息针对性解决
  ↓
└─ 6. 尝试手动下载镜像
  ↓
问题解决

预防措施
定期维护‌:

1.保持Docker版本更新
2.定期清理无用镜像和容器

配置备份‌:

备份/etc/docker/daemon.json和/etc/resolv.conf

3.记录有效的镜像源地址

生产环境建议‌

1.搭建私有镜像仓库
2.使用多个镜像源作为备份
3.配置监控告警

常见错误变体及对应方案

"net/http: TLS handshake timeout"‌:网络延迟或SSL证书问题,配置镜像加速器。
"dial tcp: lookup registry-1.docker.io"‌:DNS解析失败,修改DNS配置。
"request canceled while waiting for connection"‌:连接超时,检查网络或使用代理。

总结
该错误的核心是‌网络连接问题‌,优先通过配置国内镜像加速器解决。如果问题持续,按以下顺序排查:

镜像加速器配置 → 2. DNS设置 → 3. 网络代理 → 4. 防火墙规则 → 5. Docker服务状态。
多数情况下,配置正确的镜像加速器即可解决问题。如果所有方案均无效,那可能就是人品问题了,考虑在能正常访问的网络环境中手动下载镜像后导入。

PREV
Linux安装Pure-FTPd
NEXT
Windows Server安全设置:禁用IP源路由 DisableIPSourceRouting设置