如何加载从原始 Docker 映像的 .tar 文件创建的 Docker 映像?
Posted
技术标签:
【中文标题】如何加载从原始 Docker 映像的 .tar 文件创建的 Docker 映像?【英文标题】:How can I load a Docker image created from the .tar file of an original Docker image? 【发布时间】:2021-12-23 19:57:08 【问题描述】:我有一个 .tar 格式的 Docker 映像。当我使用sudo docker load < image.tar
加载它时,它工作正常。
我使用tar -xf image.tar
取消归档文件。然后我取消归档每个层文件,以便我可以编辑一些脚本并手动更新一些库。完成此操作后,我在每一层都使用了tar -cf
,然后是整个图像。
当我以与加载原始图像相同的方式加载修改后的图像时,它不起作用。我收到此错误:
open /var/lib/docker/tmp/docker-import-742628246/image-edited/json: no such file or directory
我做错了什么导致了这个错误,我怎样才能正确地将修改后的 .tar 文件加载到 Docker 中?
P.S.:问题出现在 Docker 20.10.12 上,在 VMWare Workstation Player 内的 Kali Linux 2021.4 上运行。
【问题讨论】:
不是 100% 确定这是否是问题所在,但层被设计为不可变的。我怀疑您对这些层进行去皮、更改它们并重新去皮并没有被忽视。 @Turing85 这就是我对图层所做的。有没有办法在不导致此错误的情况下更改图层? 不确定。我宁愿写一个自定义的容器文件(或其他可重现的东西),而不是用这种方式“破解”图像。 为什么不加载图像然后构建一个新的图像,并使用本地注册表中的Dockerfile
对其进行扩展?然后,您可以根据需要导出新图像。
【参考方案1】:
我正在修改一些图像 tarball 并尝试将其加载回 docker daemon,并看到相同的错误。我试过这个:sha256sum
layer.tar
在每一层,并搜索配置json文件(与manifest.json
同级的另一个json文件,文件名长sha值),替换为新的 sha256 值,则此错误消失。
但是话又说回来,出现了另一个像/var/lib/docker/tmp-xxxx/xxxxx cannot open file
这样的错误,然后我认为不应该/可以在层 tar 中修改任何内容,因为我们无法以任何简单的方式绕过 docker 检查图像的完整性。
我计划使用 Google jib 工具向图像添加另一层,在其中我将一些脚本复制到执行我想要的修改的容器中,以便原始层保持不变。
【讨论】:
以上是关于如何加载从原始 Docker 映像的 .tar 文件创建的 Docker 映像?的主要内容,如果未能解决你的问题,请参考以下文章