问题分析
构建镜像时报错: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 使用国内镜像源(如阿里云、腾讯云、华为云),步骤如下:
- 编辑 Docker 配置文件(通常在 /etc/docker/daemon.json),添加以下内容:
{
"registry-mirrors": [
"https://<your-aliyun-id>.mirror.aliyuncs.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io"
]
}
注意其中的 <your-aliyun-id> 需要替换为你自己的阿里云 ID。
- 保存后重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
- 验证配置:
docker info --format '{{.RegistryConfig.Mirrors}}'
最后测试一下镜像拉取是否正常。
原理分析
Docker 在拉取镜像时,会默认直接连接官方仓库 Docker Hub(地址为 registry-1.docker.io)进行拉取,因为官方仓库是在国外的,所以会出现超时问题。
镜像源是 Docker 配置的代理服务(通常由云厂商如阿里云、腾讯云提供),用于加速从 Docker Hub 中下载镜像。
若我们配置了镜像源(默认是没有配置的),Docker 会优先尝试通过这些源拉取镜像,失败后再回退到用官方仓库。所以,我们的解决办法是配置镜像源,Docker 通过这些镜像源作为代理,成功拉取了 Docker Hub 中的镜像。


