image - Docker镜像1第一层
问题描述
我用portainer分析了mongodb的docker镜像。但是层的根是一个字段。
第一层的这个文件是什么?: 1。
添加文件:93883f863ccd9e401e4f945206887f251075a63d25a8129c9bd73e707397f109 在/
以及如何分析它的来源和内容。
谢谢
解决方案
没有一般位置可以查找我知道的那些哈希值。它是正在添加的构建上下文文件或目录内容的哈希值。
你可以去上游看看基础镜像是如何创建的。例如,查看当前 alpine 映像的 docker库参考会将我带到带有 Dockerfile 和 tgz 文件的 alpine 项目。摘要由构建器在该 tgz 文件上执行,因此构建器确定是否可以重用此图像的缓存版本,因此我认为它对于反转它以获取内容没有用。
相反,如果您想知道文件中的内容并且无法像我们对 Alpine 和其他官方图像那样访问上游图像源,您可以从注册表中提取图层并示例内容。有像潜水这样的工具来检查图像,但我没有时间研究代码以了解通过访问 docker 套接字来信任它是否安全。您可以直接从注册表中提取图层。为此,自从我一直在编写它以来,我倾向于自己使用regclient/regctl ,但也有 go-containerregistry 的起重机和 RedHat 的 skopeo 可能也可以做到这一点。或者,您可以使用docker save
将图像转换为一组 tar 文件来检查每个文件。从 regctl,检查 alpine 看起来像:
$ regctl image manifest alpine:latest
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1471,
"digest": "sha256:14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2814446,
"digest": "sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e"
}
]
}
$ regctl blob get alpine:latest sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e | tar -tvzf -
drwxr-xr-x 0/0 0 2021-08-27 07:05 bin/
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/arch -> /bin/busybox
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/ash -> /bin/busybox
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/base64 -> /bin/busybox
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/bbconfig -> /bin/busybox
-rwxr-xr-x 0/0 829000 2021-06-29 12:21 bin/busybox
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/cat -> /bin/busybox
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/chgrp -> /bin/busybox
lrwxrwxrwx 0/0 0 2021-08-27 07:05 bin/chmod -> /bin/busybox
...
推荐阅读
- python - Pygame,python,全局变量,崩溃
- junit - AssertJ to Hamcrest equivalency (only for Spring MVC Test): How test each POJO item of a collection (with dates)
- javascript - jQuery儿童首先删除类
- json - 合并从wordpress导出的两个Json文件
- c++ - 显示结构的三维数组
- android - 在 Android 中单击按钮从 Webview 下载文件
- sql-server - 将 SQL 数据库部署到 Azure 失败
- javascript - 如何让角色与障碍物互动?
- java - Proguard:如何防止在Android中重命名Packagename?
- python - ModuleNotFoundError:没有名为“skmultilearn”Jupyter 的模块