一尘不染

是否可以在Docker映像中标记上一层或还原提交?

docker

假设有一个docker映像,有人对其进行了更改,然后将其推送到docker存储库。然后,我拉下图像。有没有办法获取该图像并运行上一层的容器?在进行更改之前运行版本。

如果我运行docker history,它将看起来像这样:

docker history imagename:tag
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
3e23a5875458        8 days ago          /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8            0 B
<missing>           8 days ago          /bin/sh -c dpkg-reconfigure locales &&    loc   1.245 MB
<missing>           8 days ago          /bin/sh -c apt-get update && apt-get install    338.3 MB
<missing>           6 weeks ago         /bin/sh -c #(nop) ADD jessie.tar.xz in /        121 MB
<missing>           6 weeks ago         /bin/sh -c #(nop) MAINTAINER ssss <ad   0 B
<missing>           9 months ago                                                        0 B

如果我想出一种方法来标记或标识图像的先前层,则好像可以运行早期版本。


阅读 239

收藏
2020-06-17

共1个答案

一尘不染

如果可以访问图像,可以通过标记图像的构建层来对其进行标记。如上所述这里

在您的情况下,可能会发生的事情是,从v1.10.0版本开始,它们已经改变了Docker
引擎处理内容可寻址性的方式。这在这里被大量讨论。

这意味着,除非您在当前计算机上构建了该映像,或者通过组合进行导出和加载,否则您将无权访问构建层:

docker save imagename build-layer1 build-layer2 build-layer3 > image-caching.tar
docker load -i image-caching.tar

在我之前提到的讨论中,用户发布了一种方便的方法来保存该缓存:

docker save imagename $(sudo docker history -q imagename | tail -n +2 | grep -v \<missing\> | tr '\n' ' ') > image-caching.tar

这应该收集给定映像的所有构建层,并将它们保存到缓存tar文件中。

2020-06-17