> 技术文档 > Docker配置镜像源 解决拉取镜像超时 ERROR: failed to solve xx: : failed to resolve source metadata for docker.io/li

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

排查原因,是构建过程中拉取镜像时出现了超时问题。

这表明 Docker 无法从 Docker Hub 中拉取镜像,原因是国内网络访问Docker Hub 会被限制。

解决方式:

这里直接说解决办法,想看具体原理分析的我写在本文末尾了。

解决方式是配置 Docker 使用国内镜像源(如阿里云、腾讯云、华为云),步骤如下:

  1. 编辑 Docker 配置文件(通常在 /etc/docker/daemon.json),添加以下内容:
    { \"registry-mirrors\": [ \"https://.mirror.aliyuncs.com\", \"https://mirror.baidubce.com\", \"https://docker.m.daocloud.io\" ]}

    注意其中的需要替换为你自己的阿里云id,获取阿里云id的步骤如下:

  2. 保存后重启 Docker:

    sudo systemctl daemon-reloadsudo systemctl restart docker
  3. 验证配置:

    docker info --format \'{{.RegistryConfig.Mirrors}}\'

最后测试一下:

原理分析:

Doceker 在拉取镜像时,会默认直接连接官方仓库 Docker Hub (地址为 registry-1.docker.io)进行拉取,因为官方仓库是在国外的,所以会出现超时问题。

镜像源是 Docker 配置的代理服务(通常由云厂商如阿里云、腾讯云提供),用于加速从Docker Hub中下载镜像。

若我们配置了镜像源(默认是没有配置的),Docker 会优先尝试通过这些源拉取镜像,失败后再回退到用官方仓库。

所以,我们的解决办法是配置镜像源,Docker 通过这些镜像源作为代理,成功拉取了Docker Hub中的镜像。