You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker Pull拉取镜像速度过慢问题求助:从Docker Hub拉取新镜像最后一层耗时超40分钟

问题场景回顾

你当时遇到的情况是:2021年9月7日执行docker pull从hub.docker.com拉取刚创建的镜像时速度极慢,其中最后一层成为下载瓶颈,耗时40-50分钟才完成,进度显示如下:

e249e58386a8: Downloading [===> ] 83.73MB/303.3MB

结合我日常处理Docker镜像拉取问题的经验,造成这种情况的可能原因主要有以下几类:

可能的原因分析
  • 跨境网络链路瓶颈
    这是最常见的原因,hub.docker.com的核心服务器在境外,国内访问时跨境带宽的稳定性和带宽量都很受限。尤其是你拉取的是刚创建的镜像,此时Docker Hub的全球CDN节点还没完成该镜像层的缓存同步,你的请求只能直接打向源站,源站的跨境出口带宽如果被其他请求占满,就会导致300MB左右的大镜像层下载速度被拉到极低,耗时自然会达到几十分钟。另外,你的本地网络(比如公司内网、家庭宽带)如果对境外流量有限速设置,也会加剧这个问题。

  • Docker Hub的镜像分发缓存未生效
    刚上传的镜像,Docker Hub需要时间将镜像层同步到全球各个CDN节点。如果你的请求被分配到了一个还没有缓存该镜像层的节点,这个节点就需要从主存储源站去拉取数据,源站可能处于高负载状态,或者你的请求在队列中排队,导致下载进度缓慢。最后一层往往是镜像的业务内容层,体积通常较大,一旦源站响应延迟,就会成为整个拉取过程的最大瓶颈。

  • 本地Docker配置缺失加速源
    如果当时你没有给Docker配置国内的镜像加速源,直接从官方源拉取,跨境网络的延迟和丢包会极大影响下载速度。很多时候,配置了国内加速源后,镜像拉取速度能提升几十倍,尤其是大体积的镜像层。

  • 本地磁盘IO性能瓶颈
    有时候看起来是下载慢,但其实是磁盘写入速度跟不上。如果你当时用的是机械硬盘(HDD),而镜像层体积较大,下载完成后写入磁盘的过程会比较耗时,进度条看起来像是停滞,但实际是本地IO的问题。可以通过观察系统的磁盘IO占用率来验证这一点。

  • 镜像上传未完成或同步异常
    刚创建的镜像可能还没在Docker Hub完全完成上传校验和跨节点同步,部分节点上的镜像层数据可能不完整或者处于待同步状态,这时候下载过程中会出现多次重试、断点续传的情况,导致进度断断续续,整体耗时被拉长。


内容的提问来源于stack exchange,提问作者szabozoltan

火山引擎 最新活动