[已解决]failed to resolve source metadata for docker.io/library/node:16: failed to do request: Head
ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: node:16: failed to resolve source metadata for docker.io/library/node:16: failed to do request: Head "https://registry-1.docker.io/v2/library/node/manifests/16": dial tcp 111.243.214.169:443: i/o timeout root@hcss-ecs-3e51:~/Personal-Web#
问题 Docker pull镜像时候 pull 失败
之前部署项目的时候 ,Docker 死活拉镜像拉不下来
看起来像,Docker 在尝试从 registry.docker-cn.com
拉取 node:16
镜像时,由于网络原因导致请求超时(i/o timeout
)。这表明当前的镜像源可能存在问题,或者网络连接不稳定。
root@hcss-ecs-3e51:~/Personal-Web# docker build -t personal-web . [+] Building 30.1s (2/2) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 393B 0.0s => ERROR [internal] load metadata for docker.io/library/node:16 30.0s ------ > [internal] load metadata for docker.io/library/node:16: ------ Dockerfile:2 -------------------- 1 | # 使用 Node.js 官方镜像 2 | >>> FROM node:16 3 | 4 | # 设置工作目录 -------------------- ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: node:16: failed to resolve source metadata for docker.io/library/node:16: failed to do request: Head "https://registry-1.docker.io/v2/library/node/manifests/16": dial tcp 111.243.214.169:443: i/o timeout root@hcss-ecs-3e51:~/Personal-Web#
建议我们先 检测一下网络通讯
ping baidu.com
ping registry.docker-cn.com
解决方法1
vi /etc/docker/daemon.json
加上
"https://docker.1ms.run",
"https://docker.1panel.live/"
向这样
随后就可以了
解决方法2
使用 华为云 阿里云 腾讯云
docker pull hub-mirror.c.163.com/library/ 你需要pull的东西
docker pull registry.cn-hangzhou.aliyuncs.com/library/ 你需要pull的东西
docker pull mirror.ccs.tencentyun.com/library/ 你需要pull的东西
又或者
1. 编辑 /etc/docker/daemon.json
文件,添加以下内容:
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://mirror.ccs.tencentyun.com"
]
}
2. 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
再尝试
错误原因
猜测
最初的错误 DeadlineExceeded: node:16: failed to resolve source metadata for docker.io/library/node:16: failed to do request: Head "https://registry-1.docker.io/v2/library/node/manifests/16": dial tcp 111.243.214.169:443: i/o timeout
表示 Docker 在拉取 node:16
镜像时,由于网络连接超时导致操作失败。
Docker 默认从 Docker Hub(https://registry-1.docker.io
)拉取镜像,而 Docker Hub 的服务器位于国外, 当 Docker 尝试连接 Docker Hub 服务器获取 node:16
镜像的元数据信息时,由于网络延迟过高或连接中断,在规定的时间内(即超时时间)未能完成请求,就会触发 i/o timeout
错误。
当我们配置了这些镜像加速地址后,Docker 会优先从这些国内的加速镜像源拉取镜像。大大提高镜像拉取的速度,减少网络延迟和超时的情况,从而成功解决了之前拉取镜像时出现的超时错误。
简单来说,就是通过更换到更快速、稳定的国内镜像源,避免了因连接国外 Docker Hub 服务器时网络问题导致的拉取镜像失败。