file integrity checksum failed

文章来源:陈同学 | file integrity checksum failed

本文记录上周Docker遇到的一个问题

问题背景

Jenkins自动构建镜像之后,向私有registry推送镜像时,出现了如下错误,且镜像push失败

file integrity checksum failed for "etc/ssl/certs/java/cacerts”

排查过程

因仅熟练使用Docker命令,对于其原理并未过多学习,因此排查问题过程比较笨,以下记录排查步骤:

  • 向其他registry推送该镜像同样推送失败 -> 说明并非registry问题
  • 推送其他镜像到registry,推送成功 -> 说明docker正常
  • 将Dockerfile的 FROM 镜像改为其他基础镜像,push成功 -> 说明基础镜像出了问题
  • 彻底删除出了问题的基础镜像,重新pull该镜像,push成功

通过各步骤可以判断是基础镜像出了问题,联想到前一周暴力删除过/var/lib/docker/overlay目录中两年前的文件夹,因此问题原因已明确:
因为删除了基础镜像的某层对应的文件夹,导致镜像的checksum对不上,此时镜像已不完整,因此push失败

为什么删除/var/lib/docker/overlay下的数据?
/overlay目录已经有约150G, 很多早期产生的垃圾镜像以无法通过docker rmi -f强行清理,因此对开发环境的registry进行了尝试性的暴力清理,由此产生的问题也让我们学习了docker的OverlayFS

解决方式

  • 方式一:彻底删除基础镜像并重新获取
  • 方式二:直接弃用该基础镜像, 使用更高版本的镜像(前提是有高版本的镜像,且不影响程序)

你可能感兴趣的:(file integrity checksum failed)