国内服务器部署docker,部署以后,如果公司没有提供镜像中心,开发首先要做的就是配置一个国内的镜像加速地址。巧了今天有台服务器,配置了镜像加速地址,但是发现拉取镜像的时候,一直拉取不到。
报错信息:Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
20250106 时隔两天,所有的服务器都恢复了,这事居然不上热搜,国内所有的镜像代理都挂了
故障排查与修复尝试
起初,尝试切换至其他镜像加速地址,期望借此解决问题,然而事与愿违,问题依旧。
紧接着,着手修改本地 DNS 配置,试图从网络解析层面找到突破口,遗憾的是,经过一番调试,故障依然存在。
此时,本地网络的稳定性已备受质疑,于是果断切换至手机热点,试图绕过可能存在的本地网络故障点,可结果还是令人沮丧,问题毫无改善迹象。
问题蔓延
手头尚有几台部署于国内的服务器,且均安装了 Docker 环境。尝试在这些服务器上拉取镜像,本以为能另辟蹊径,结果发现无一例外,均无法成功拉取,所反馈的报错信息如出一辙,这表明问题并非局限于某一台设备。
进一步探究发现,镜像代理似乎瞬间失灵,在这紧急关头,迅速切换至境外机器进行尝试,令人稍感欣慰的是,镜像拉取在此处恢复正常,这意味着问题大概率出在国内的网络链路或相关配置上。
策略调整:迂回解决
鉴于国内直接拉取镜像的途径已被重重阻碍,而国外镜像却能正常访问,为尽快推进项目,决定采取迂回战术。首先切换至国外服务器,顺利拉取所需镜像,随后将其推送至国内镜像仓库,以此搭建起一座“数据桥梁”。
与此同时,同步对 Dockerfile 文件进行修改,将镜像地址替换为适配国内环境的地址,再重新构建镜像,最终成功部署。