首页 > 解决方案 > Docker镜像1第一层

问题描述

我用portainer分析了mongodb的docker镜像。但是层的根是一个字段。

第一层的这个文件是什么?: 1。

添加文件:93883f863ccd9e401e4f945206887f251075a63d25a8129c9bd73e707397f109 在/

以及如何分析它的来源和内容。

谢谢

标签: imagedockercontainerslayer

解决方案


没有一般位置可以查找我知道的那些哈希值。它是正在添加的构建上下文文件或目录内容的哈希值。

你可以去上游看看基础镜像是如何创建的。例如,查看当前 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
...

推荐阅读