1. docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

在使用 Docker 时,有时会遇到类似以下的报错信息:

docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

这个错误通常与 Docker 的网络连接、代理配置、DNS 解析等相关,可能会导致无法从 Docker Hub 拉取镜像。

错误分析:net/http: request canceled

这个错误是由于 Docker 在与 Docker Hub 进行通信时遇到了超时或网络连接中断等问题。一般情况下,这种错误出现在以下几种情况: - 网络不稳定:Docker 无法与 Docker Hub 的服务器建立稳定的连接。 - DNS 问题:DNS 配置错误或网络环境问题,导致无法解析 Docker Hub 的域名。 - 代理问题:如果你在使用代理服务器,有可能是代理配置导致的请求中断。 - 防防火墙或安全软件:一些防火墙或安全软件可能会阻止 Docker 与外部服务器的通信。

常见解决方案

检查网络连接

首先,确保你的机器可以正常访问 Docker Hub。你可以通过 ping 或 curl 命令来测试网络连接。

 使用 ping 测试网络连接
ping registry-1.docker.io

或者使用 curl 测试
curl -v https://registry-1.docker.io/v2/

如果网络连接失败,可能需要检查你的网络配置,或者检查是否存在局域网的防火墙、代理服务器等。

使用 DNS 服务器

某些网络环境下,DNS 解析可能会出现问题,导致 Docker 无法连接到 Docker Hub。可以尝试使用公用 DNS 服务器,如 Google 的 8.8.8.8 或 8.8.4.4,或者 Cloudflare 的 1.1.1.1。

编辑 /etc/resolv.conf 文件:

sudo nano /etc/resolv.conf

将 DNS 设置为 8.8.8.8 和 8.8.4.4:

nameserver 8.8.8.8
nameserver 8.8.4.4

保存并退出,然后重新启动 Docker 服务:

sudo systemctl restart docker

配置 Docker 镜像加速器

Docker Hub 的官方镜像服务器在国内访问可能较慢或不稳定,因此可以使用国内的 Docker 镜像加速器。常见的加速器有:

  • 阿里云镜像加速器:https://cr.console.aliyun.com/
  • 网易云镜像加速器:https://hub.c.163.com/
  • DaoCloud 镜像加速器:https://www.daocloud.io/

以阿里云为例,配置方法如下:

登录阿里云控制台,进入镜像加速器页面,复制加速器地址。

镜像加速器页面: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

修改 Docker 配置文件,添加镜像加速器地址:

sudo nano /etc/docker/daemon.json

在文件中添加如下内容(以阿里云为例):

{
  "registry-mirrors": ["https://<your_mirror_address>.mirror.aliyuncs.com","https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]]
}

保存并退出文件,重启 Docker 服务:

sudo systemctl restart docker

禁用 IPv6

在某些网络环境中,IPv6 可能导致连接问题。你可以尝试禁用 Docker 中的 IPv6 配置。

编辑 Docker 配置文件/etc/docker/daemon.json:

sudo nano /etc/docker/daemon.json

添加或修改以下内容:

{
  "ipv6": false
}

保存并退出,重启 Docker 服务: ```sudo systemctl restart docker

### 检查防火墙或安全软件设置
如果你的系统启用了防火墙或安全软件,可能会阻止 Docker 访问外部服务器。你可以暂时禁用防火墙,测试是否为防火墙问题。

暂时禁用 UFW(Ubuntu 防火墙):`sudo ufw disable`

检查其他防火墙设置,如 iptables,并确保 Docker 使用的端口(如 443、80)没有被阻塞。
### 增加 Docker 的超时设置
有时网络较慢会导致连接超时,增加 Docker 的超时时间可能有助于解决问题。可以在 Docker 配置文件中增加超时设置。

编辑` /etc/docker/daemon.json` 文件:

sudo nano /etc/docker/daemon.json

添加以下配置:
```shell
{
  "max-concurrent-downloads": 3,
  "features": {
    "buildkit": true
  }
}

保存并退出,然后重启 Docker:

sudo systemctl restart docker

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://jiangyudong.top/subject/article/ProblemSummary/

许可协议:署名-非商业性使用 4.0 国际许可协议