使用 docker 或其他工具从图像存储库中获取单层?
Fetch single layer from image repository using docker or other tooling?
我们的构建创建了临时图像,我们将其存储到存储库中以用于缓存目的,因为后续图像依赖于它们。
之后图像未标记。我可以从构建日志中获取的层 ID。
但由于它们可能在某些层中包含凭据(通过“ENV API_KEY=$API_KEY 在 Dockerfile 中设置)我只想获取这些层并确保没有人可以提取凭据.
有没有简单的方法?
我不确定您实际上是在引用整个图像 ID 还是单层 ID。通常你也应该看到图像的完整摘要。使用整个图像摘要,您可以执行以下操作。如果您不知道配置文件层的特定层,也可以针对单层完成最后的步骤。
但一般来说,这取决于清单架构版本。使用模式版本 1,您可以在清单上看到环境变量。对于模式版本 2,它是两步过程。示例基于 Docker Hub 注册表,但在其他地方也应用了相同的 API。
这两种情况,首先都需要authentication token,可以获取:
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”" "https://index.docker.io/v2/<repository>/manifests/latest" | jq ".history"
Manifest v2 架构使用不同的 Accept header,现在得到更多支持并提供更多信息:
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
我们的构建创建了临时图像,我们将其存储到存储库中以用于缓存目的,因为后续图像依赖于它们。
之后图像未标记。我可以从构建日志中获取的层 ID。
但由于它们可能在某些层中包含凭据(通过“ENV API_KEY=$API_KEY 在 Dockerfile 中设置)我只想获取这些层并确保没有人可以提取凭据.
有没有简单的方法?
我不确定您实际上是在引用整个图像 ID 还是单层 ID。通常你也应该看到图像的完整摘要。使用整个图像摘要,您可以执行以下操作。如果您不知道配置文件层的特定层,也可以针对单层完成最后的步骤。
但一般来说,这取决于清单架构版本。使用模式版本 1,您可以在清单上看到环境变量。对于模式版本 2,它是两步过程。示例基于 Docker Hub 注册表,但在其他地方也应用了相同的 API。
这两种情况,首先都需要authentication token,可以获取:
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”" "https://index.docker.io/v2/<repository>/manifests/latest" | jq ".history"
Manifest v2 架构使用不同的 Accept header,现在得到更多支持并提供更多信息:
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