Please enable Javascript to view the contents

拉取 Dockerhub 镜像,无法连接 Cloudflare

 ·  ☕ 1 分钟

1. 错误提示

在拉取镜像时,偶尔会碰到如下错误:

1
2
3
4
5
6
7
8
docker pull node:10.16-alpine

10.16-alpine: Pulling from library/node
e7c96db7181b: Already exists
50958466d97a: Pulling fs layer
56174ae7ed1d: Pulling fs layer
284842a36c0d: Pulling fs layer
error pulling image configuration: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/b9/b95baba1cfdbfa8b789137179d8efff08b9768f1906725a8758cf0c431b59621/data?verify=1636603895-lbb1QIruPZBdfgfhBZ95ArGK0wU%3D": dial tcp 104.18.124.25:443: i/o timeout

2. 主要解决办法

2.1 修改 DNS 地址

如果是 CentOS ,直接修改 /etc/resolv.conf 文件,新增一行 nameserver 8.8.8.8 即可。

如果是 Ubuntu ,需要修改 /etc/systemd/resolved.conf,添加如下内容:

[Resolve]
DNS=8.8.8.8

接着执行命令 systemctl restart systemd-resolved 重启服务即可。

2.2 本地与服务器时间偏差过大

执行如下命令,进行时间同步:

1
ntpdate time.windows.com

2.3 配置镜像加速

配置镜像加速之后,如果待拉取的镜像已经存在于 mirror ,则直接从 mirror 拉取镜像层数据。

1
2
3
{
  "registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com"],
}

3. 可能的原因

3.1 Cloudflare 的 IP 被禁

Dockerhub 借助 Cloudflare 的网络进行镜像的分发。在国内环境下,Cloudflare IP 的可用性得不到保障,部分 IP 被禁。

通过修改 nameserver 改变了 production.cloudflare.docker.com 指向的服务 IP 地址,切换到其他 IP 上尝试。而进行时间同步,应对的是证书无效问题,这里可能并没有效果,而只是拖延了时间,以便 DNS 指向发生变化。配置镜像加速之后,拉取镜像的 IP 会发生变化,也有可能解决问题。

3.2 Dockerhub 提升营收的策略

由于 Dockerhub 大部分都是免费的用户,难以承担巨额的带宽和存储费用,因此免费用户在可用性受损。


微信公众号
作者
微信公众号