Docker:生成失败,出现错误未知的父映像 ID



我面临间歇性构建作业失败,并出现以下错误。

[0munknown parent image ID sha256:478c35b0xxxxxxxxxxxxxxx
Build step 'Execute shell' marked build as failure

这通常发生在您同时清理 docker 内存(或有人删除/var/lib/docker/image/overlay2/imagedb/content 的内容或同时运行 docker 系统修剪(时,因此您正在构建的映像无法找到存在图像数据的父文件夹。 确保这不会同时发生,然后重新启动构建。

如果你有一个none名称的映像,则需要删除它并重建你的容器。这就是为我解决它的原因。

我在构建 docker 映像时也有同样的担忧。我收到的错误消息如下:

[Docker] ERROR: Failed to create docker image: Could not build image: unknown parent image ID sha256:cc0b3bd844b13a2ebfc6915019a8194538f2d0b41e420b76a20702e985e2a298
ERROR: Build step failed with exception
com.github.dockerjava.api.exception.DockerClientException: Could not build image: unknown parent image ID sha256:cc0b3bd844b13a2ebfc6915019a8194538f2d0b41e420b76a20702e985e2a298

对我有用的只是尝试再次重建图像,而且效果很好。

就这样。

我希望这有帮助

在构建命令行中使用--no-cache标记。

docker build --no-cache -t dockerimagenew:v1 .

这可能是在docker进程之间共享磁盘的各种机器上的薄片,例如 Buildkite 实例。简单地重新启动构建对我有用。

为了防止这种情况发生,请执行所有 docker "清理"操作(使用docker system prunedocker rmi(,以便任何构建管道(使用docker build(都可以与清理过程同时运行。

假设清理操作也使用 Jenkins 自动执行,则可以尝试使清理和生成管道不重叠。

一个(不完美的(解决方案是优先级排序器插件,使用它您可以:

  • 将所有生成管道和清理管道放在两个不同的作业组中,然后
  • 使这两个组与runExclusive: true相互排斥。

它并不完美,因为它不会追溯影响正在运行的管道。


此问题是由 Docker 构建缓存未命中引起的,这些失误无法提前预测(当失败的构建开始时(,因为相关层在(长时间运行的(构建的后期阶段从构建缓存中消失,被其他一些繁重的"清理"过程删除。

验证这是原因,请检查 Jenkins docker 插件在其错误消息中显示的摘要是否确实从本地映像缓存中丢失:

# given this Jenkins docker plugin error message:
unknown parent image ID sha256:a7b0fc09ca549c852550f050ef2079663232405f0e3abd5c1a0051f30eb448f4
# ... let's search for the missing digest:
$ docker images --digests | grep a7b0fc09ca549c852550f050ef2079663232405f0e3abd5c1a0051f30eb448f4
$ 

最新更新