CircleCI镜像缓存疑问:两类镜像拉取状态日志提示的差异原因
CircleCI镜像拉取日志差异及缓存异常原因说明
两条拉取日志的核心差异
pull stats: Image was already available so the image was not pulled:当前执行任务的宿主机器已缓存对应版本的目标镜像,无需从远端镜像仓库拉取,可直接启动容器执行后续任务。image cache not found on this host, downloading cimg/node:14.17.6:当前执行任务的宿主机器未匹配到对应镜像的有效缓存,需要先从镜像仓库下载完整镜像资源后才能启动容器。
CircleCI官方对下一代镜像的缓存优化说明如下:
"and a higher likelihood that the image is already cached on the host."
该表述仅指下一代镜像的缓存命中概率相对传统镜像更高,并不保证100%命中。
同一镜像缓存状态波动的常见原因
出现同一镜像前一次运行无需拉取、后一次运行需要重新下载的情况,通常由以下几个因素导致:
- 任务调度到不同宿主:CircleCI的任务运行环境属于共享弹性资源池,前后两次提交的任务不一定会被分配到同一台物理宿主上。前一次任务分配到了已经缓存过该镜像的机器,后一次任务分配到了从未拉取过该镜像、或者镜像已被清理的机器,就会触发重新下载逻辑。
- 宿主缓存被自动回收:为了避免磁盘空间被大量冗余镜像占满,宿主机器会定期清理长时间未被使用的镜像缓存。即便两次任务被分配到了同一台机器,如果两次运行的间隔时间超过了缓存保留周期,对应镜像也会被系统清理,需要重新拉取。
- 镜像发生隐性更新:如果官方对同一个标签的镜像做了补丁更新(比如修复底层系统漏洞、更新基础依赖),即使镜像的标签没有变化,镜像的实际哈希值已经发生改动,宿主上存储的旧版本同标签镜像不会被识别为匹配缓存,也会触发重新下载。

内容的提问来源于stack exchange,提问作者user1665355
相关产品推荐
相关产品推荐

