在 docker 1.10 之后,有没有办法访问从中间层删除的文件?
Are there ways to access files removed from intermediate layer after docker 1.10?
在 docker 1.10 之后,如果您从其他地方拉取图像而不是在本地构建,docker history
将不再显示图像的中间层。
This github issue 讨论了这个变化,还提到使用 docker save
和 docker load
,你可以使用中间层作为缓存。
这是否意味着,如果构建图像并简单地上传到存储库(即没有 tar 文件),下载图像的人无法恢复中间层?
我特别想知道的是:
COPY sensitive_file .
RUN do_something_with ./sensitive_file
RUN rm ./sensitive_file
这样写Dockerfile可以吗,假设(除非docker中存在未知漏洞)这个敏感文件不会被其他人访问?
我知道还有其他方法可以处理凭据或敏感文件,例如设置本地服务器和 RUN wget file && use file && rm file
、docker secret with swarm,或使用 [=30= 】 金库。我不是在寻找不同的方法来处理敏感文件;相反,我只是对上述方法是否使文件可访问感兴趣。谢谢!
Docker Images 由 1 个或多个文件系统层组成。 Dockerfile
中每个修改文件系统的命令都会创建一个新的文件系统层。从更高层删除后,敏感文件将保留在它们的层中(随后的 Dockerfile
步骤)。
您需要 export/import 构建的图像来展平图像层,并从按照您建议的步骤构建的图像中删除敏感文件。
即使您没有每个层的图像 ID,图像仍作为层发送。您可以在 .RootFS.Layers 部分的 docker image inspect $image_name
中看到它。
这些层存储在硬盘上,根据所使用的存储驱动程序,可以轻松访问。至少对于 overlay2,这在 .GraphDriver 部分下的 docker image inspect
输出中是可见的。
最后,您可以在任何从注册表中提取图像副本的 docker 引擎上使用 docker save
,将其转换回包含每一层的 tar 文件作为 tar 文件。因此,通过注册表传输图像并不能消除这种攻击向量。
在 docker 1.10 之后,如果您从其他地方拉取图像而不是在本地构建,docker history
将不再显示图像的中间层。
This github issue 讨论了这个变化,还提到使用 docker save
和 docker load
,你可以使用中间层作为缓存。
这是否意味着,如果构建图像并简单地上传到存储库(即没有 tar 文件),下载图像的人无法恢复中间层?
我特别想知道的是:
COPY sensitive_file .
RUN do_something_with ./sensitive_file
RUN rm ./sensitive_file
这样写Dockerfile可以吗,假设(除非docker中存在未知漏洞)这个敏感文件不会被其他人访问?
我知道还有其他方法可以处理凭据或敏感文件,例如设置本地服务器和 RUN wget file && use file && rm file
、docker secret with swarm,或使用 [=30= 】 金库。我不是在寻找不同的方法来处理敏感文件;相反,我只是对上述方法是否使文件可访问感兴趣。谢谢!
Docker Images 由 1 个或多个文件系统层组成。 Dockerfile
中每个修改文件系统的命令都会创建一个新的文件系统层。从更高层删除后,敏感文件将保留在它们的层中(随后的 Dockerfile
步骤)。
您需要 export/import 构建的图像来展平图像层,并从按照您建议的步骤构建的图像中删除敏感文件。
即使您没有每个层的图像 ID,图像仍作为层发送。您可以在 .RootFS.Layers 部分的 docker image inspect $image_name
中看到它。
这些层存储在硬盘上,根据所使用的存储驱动程序,可以轻松访问。至少对于 overlay2,这在 .GraphDriver 部分下的 docker image inspect
输出中是可见的。
最后,您可以在任何从注册表中提取图像副本的 docker 引擎上使用 docker save
,将其转换回包含每一层的 tar 文件作为 tar 文件。因此,通过注册表传输图像并不能消除这种攻击向量。