0

我们的构建创建了临时图像,我们将其存储到存储库中用于缓存目的,因为后续图像依赖于它们。

之后图像未标记。我可以从构建日志中获得的层 ID。

但由于它们可能在某些层中包含凭据(通过“ENV API_KEY=$API_KEY 在 Dockerfile 中设置”)我只想获取这些层并确保没有人可以提取凭据。

有没有一种简单的方法可以做到这一点?

4

1 回答 1

1

我不确定您实际上是在引用整个图像 ID 还是单层 ID。通常你也应该看到整个图像摘要。使用整个图像摘要,您可以执行以下操作。如果您不知道配置文件层的特定层,也可以为单层完成最后的步骤。

但总的来说,这取决于清单模式版本。使用架构版本 1,您可以在清单上查看环境变量。对于模式版本 2,这是两步过程。示例基于 Docker Hub 注册表,但在其他地方应用了相同的 API。

在这两种情况下,您首先需要身份验证令牌,可以获取:

curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:<repository>:pull" > auth.json

然后在版本 1 模式中提取清单并获取包含环境变量的历史记录部分:

curl --request GET -sLH "Authorization: Bearer `jq -r '.token' auth.json`" -H "Accept: application/vnd.docker.distribution.manifest.v1+json”&quot; "https://index.docker.io/v2/<repository>/manifests/latest" | jq ".history"

Manifest v2 模式使用不同的 Accept 标头,并且在这些天得到更多支持并提供更多信息:

curl --request GET -sLH "Authorization: Bearer `jq -r '.token' auth.json`" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "https://index.docker.io/v2/<repository>/manifests/latest"

在响应中有配置部分:

"config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 5802,
      "digest": "sha256:2ff217b387d7bbc0ad3fb1cbb2cdae9f7e562f26065f847a1b69964fcb71108"
   }

最后下载整个 blob:

curl --request GET -LOH "Authorization: Bearer `jq -r '.token' auth.json`" "https://index.docker.io/v2/<repository>/blobs/sha256:2ff217b387d7bbc0ad3fb1cbb2cdae9f7e562f26065f847a1b69964fcb71108"

查看整个配置文件的内容,其中包含环境变量和历史记录:

jq . sha256:2ff217b387d7bbc0ad3fb1cbb2cdae9f7e562f26065f847a1b69964fcb71108
于 2021-02-24T16:39:36.063 回答