Docker配置镜像源 解决拉取镜像超时 ERROR: failed to solve xx: : failed to resolve source metadata for docker.io/li
分析问题:
我在构建镜像时报错:ERROR: failed to solve: golang:1.21: failed to resolve source metadata for docker.io/library/golang:1.21: failed to do request: Head "https://registry-1.docker.io/v2/library/golang/manifests/1.21": dial tcp 202.160.128.205:443: i/o timeout
排查原因,是构建过程中拉取 golang:1.21 镜像时出现了超时问题。
这表明 Docker 无法从 Docker Hub 中拉取 golang:1.21 镜像,原因是国内网络访问Docker Hub 会被限制。
解决方式:
这里直接说解决办法,想看具体原理分析的我写在本文末尾了。
解决方式是配置 Docker 使用国内镜像源(如阿里云、腾讯云、华为云),步骤如下:
- 编辑 Docker 配置文件(通常在 /etc/docker/daemon.json),添加以下内容:
{ "registry-mirrors": [ "https://
.mirror.aliyuncs.com", "https://mirror.baidubce.com", "https://docker.m.daocloud.io" ] } 注意其中的
需要替换为你自己的阿里云id,获取阿里云id的步骤如下: -
保存后重启 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker
-
验证配置:
docker info --format '{{.RegistryConfig.Mirrors}}'
最后测试一下:
原理分析:
Doceker 在拉取镜像时,会默认直接连接官方仓库 Docker Hub (地址为 registry-1.docker.io)进行拉取,因为官方仓库是在国外的,所以会出现超时问题。
镜像源是 Docker 配置的代理服务(通常由云厂商如阿里云、腾讯云提供),用于加速从Docker Hub中下载镜像。
若我们配置了镜像源(默认是没有配置的),Docker 会优先尝试通过这些源拉取镜像,失败后再回退到用官方仓库。
所以,我们的解决办法是配置镜像源,Docker 通过这些镜像源作为代理,成功拉取了Docker Hub中的镜像。