2017-10-11 45 views
0

码头1.10之后,docker history不再显示图像的中间层,如果您从其他位置将其拉出,而不是在本地建立。在docker 1.10之后有没有方法可以访问从中间层移除的文件?

This github issue讨论了这个变化,还提到使用docker savedocker load,你可以利用中间层作为缓存。

这是否意味着,如果一个图像被构建并且简单地上传到存储库(即没有tar文件),那么下载图像的人无法恢复中间层?

我特别想知道的是:

COPY sensitive_file . 
RUN do_something_with ./sensitive_file 
RUN rm ./sensitive_file 

它是好写Dockerfile像上述情况,并假设(除非有搬运工未知漏洞)这个敏感的文件将不能被访问其他?


我知道,有处理凭证或敏感文件的其他方式,如建立一个本地服务器和RUN wget file && use file && rm file,搬运工秘密与群,或使用搬运工保管库。我不是在寻找处理敏感文件的不同方法;相反,如果上述方法使文件可访问,我只是感兴趣。谢谢!

回答

0

即使您没有每个图层的图像ID,图像仍作为图层发货。您可以在.RootFS.Layers部分的docker image inspect $image_name中看到。

这些图层存储在硬盘驱动器上,根据所使用的存储驱动程序,可能很容易访问这些图层。至少在overlay2中,这在.GraphDriver部分的docker image inspect输出中可见。

最后,您可以在任何docker引擎上使用docker save,该引擎已从注册表中将图像的副本拉回到将每个图层包含为tar文件的tar文件。因此,通过注册表传输图像并不能消除这种攻击媒介。

0

Docker Images由1个或多个文件系统层组成。修改文件系统的Dockerfile中的每个命令都会创建一个新的文件系统层。从较高层删除后,敏感文件将保留在其图层中(随后的步骤Dockerfile)。

您需要导出/导入构建的图像以平铺图像图层,并从使用建议的步骤构建的图像中删除敏感文件。

相关问题