【问题标题】:Docker image 1 first layerDocker镜像1第一层
【发布时间】:2021-09-20 14:21:30
【问题描述】:

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

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

添加文件:93883f863ccd9e401e4f945206887f251075a63d25a8129c9bd73e707397f109 in /

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

谢谢

【问题讨论】:

  • 它可能是一个基础 Linux 发行版的 tar 文件; Alpine、Debian 或 Ubuntu 映像。您必须回头查看原始图像的 Dockerfile 和上面的图像链。对于实际编程目的,这通常无关紧要。
  • 嗨,是的,我明白,但我想确信我的形象中的内容以及它的来源。我在哪里可以查找哈希文件?

标签: image docker containers layer


【解决方案1】:

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

您可以到上游查看基本映像是如何创建的。例如,查看当前 alpine 映像的 docker library 引用会将我带到带有 Dockerfile 和 tgz 文件的 the alpine project。摘要是由构建器对该 tgz 文件执行的,因此构建器可以确定是否可以重用此图像的缓存版本,因此我认为它对于反转它以获取内容没有用。

相反,如果您想知道文件中的内容并且无法像我们对 Alpine 和其他官方图像那样访问上游图像源,您可以从注册表中提取图层并举例说明内容。有像dive 这样的工具用于检查图像,但我没有时间研究代码以了解通过访问 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
...

【讨论】:

  • 谢谢你的好回答。所以我们可以说: 1. 如果不是官方图片,里面可能会有鱼腥味。我必须自己打开包装并扫描它。 2. 如果是像 mongo:xxxx 这样的官方形象,我相信他们。但有时在官方图像不同的帐户上传图像。如果我不能证明基本图像,我会担心特殊的旧图像。
  • @DenisSteif 我将从您的 docker 构建过程、Dockerfile 和 from 行开始,看看您是否信任该基础映像。事后剖析图像更像是取证,而不是一种非常用户友好的方式来管理您的信任。
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 2020-07-02
  • 2015-03-14
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多