我有以下内容Dockerfile:
FROM busybox
COPY ./manifest.json /usr/manifest.json
RUN rm /usr/manifest.json
Run Code Online (Sandbox Code Playgroud)
哪里manifest.json只是我找到的一些随机文件..
当我从这个 Dockerfile 构建图像时,将有 3 层(如预期)。当我检查这 3 层时,我将看到预期的文件层次结构。所以第一个层将相当冗长,例如...
bin/acpid
bin/add-shell
bin/addgroup
bin/adduser
bin/adjtimex
bin/ar
bin/arch
bin/arp
bin/arping
bin/ash
... many more
Run Code Online (Sandbox Code Playgroud)
第二层将是:
usr/manifest.json
Run Code Online (Sandbox Code Playgroud)
第三层是:
proc/.wh..wh..opq
sys/.wh..wh..opq
usr/.wh.manifest.json
Run Code Online (Sandbox Code Playgroud)
我猜.wh.manifest.json意味着在应用该层时删除该文件?(不确定,只是猜测..)
我的最终目标是实际创建生成的图像将具有的文件夹结构。因此,对于上述情况,它本质上应该等于第一层,因为我首先添加一个文件,然后删除它。
我找不到任何关于.wh代表什么的文档。迭代这样的层并继续添加文件(到某个目标,现在无关紧要)并删除添加的文件(如果发现它们带有前缀)是否.wh有意义?或者我完全关闭了,还有更好的方法吗?
如果有人感兴趣,我有一些 Java 代码,可以下载并检查图像的现有层:
FROM busybox
COPY ./manifest.json /usr/manifest.json
RUN rm /usr/manifest.json
Run Code Online (Sandbox Code Playgroud)
我知道您基本上只想提取 docker 映像的文件和目录结构,以及应用所有层的最终结果。
最简单的方法是只使用标准docker命令,让 docker 完成所有繁重的工作,这样您就不必自己担心内部细节。
为此,docker 提供了将容器导出为 tar 存档的docker export命令。要为图像创建容器而不启动它(不修改任何文件),您可以使用以下docker create命令:
# create container from image without starting it
docker create --name my_container my_image
# export container file system to tar archive
docker export -o my_image.tar my_container
# or directly extract the archive in the current folder
docker export my_container | tar -x
# clean up temporary container
docker rm my_container
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |