【问题标题】:Using the Python Docker API to get an Image hash from an AWS ECR使用 Python Docker API 从 AWS ECR 获取图像哈希
【发布时间】:2019-08-20 21:13:05
【问题描述】:

我一直在使用 Docker Python APIBoto3 构建映像并将它们推送到 Amazon ECR。我很难确定的是如何确定我构建的图像是否已经存在于 ECR 中?我可以像这样使用 Boto3 库:

import boto3
import botocore

client = boto3.client('ecr')
images = client.list_images(repositoryName=repo_name, registryId=repo_id)

这会给我一个摘要列表,但它们不是图像摘要。它们是 Docker 存储库摘要(这是图像的摘要 + 其清单)。因此,如果我在本地构建映像,则无法使用它来检查该映像是否已存在并带有 Amazon ECR 上的标签。

import docker
client = docker.from_env()
image = client.build(path=docker_dir)
sha256 = image[0].id # <--This Sha sum is for the image, different from repository 

是否可以在给定存储库中获取图像的实际图像摘要而无需提取图像?

【问题讨论】:

  • 我认为如果你对 ECR 清单进行哈希处理,你应该得到与 sha256 相同的值。我不熟悉 ECR,但最近使用 dockerhub 和 Google Container Registry (GCR) 为我自己的教育探索了这一点:medium.com/google-cloud/…

标签: python docker docker-registry amazon-ecr


【解决方案1】:

我认为您可能做错了什么,因为我使用的代码与您的代码非常相似,而且我正在获取摘要。

session = boto3.Session(profile_name='default')
ecr = boto3.client('ecr')
docker_api = docker.APIClient()
print(session)

response = client.list_images(

    repositoryName='repoparent/reponame',

    maxResults=5,
    filter={
        'tagStatus': 'ANY'
    }
)

print (response)

我得到了类似的响应,imagedigest 包含在响应中

Session(region_name='eu-central-1')
{'imageIds': [{'imageDigest': 'sha256:cbb5f28f7a8377207c8f95e3a9fae311fa12f81a22401e053d5c07fd0f87', 'imageTag': 'temp_e2e_1.0.13'}], 'nextToken': 'ukD72mdD/mC8b5xV3susmJzzaTgp3hKwR9nRUWa1yZZ4wYnPpldlCcKdX0uA+hWWOLo3ccyBGxIDoN9FQLPPEHv2DRd1OrIm4ooJdVM1M6sckRwXypd7HXj/SnA9iMm3YBl8HRpVXD/kVWB2VlNFS4aftrQQgtfrPNl6nb/S4zGFrQGQp23fdsY5TsKrWTLOWrdo8HGhWX2ylJ0Qoi19DAOBEN2/JAwMbk2hyquf5NDeA7omjHUMI1pfX5lpO2FPF39DKMZtzdwe24e8RcHa508aukf9CYW6gya6knjWbJfQSrb4lIP4HsTVBqDUuxg5IC9ghqLdXJNCEzWHzwQtuKg0vLdHmM6iftfrVhsgY6rKtZbcXwxlJb3a7FMMdm', 'ResponseMetadata': {'RequestId': 'fb33b587-795d-11e9-a32-17af1b3e4c54', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'fb33587-75d-11e9-a3342-17af1b3e4c54', 'content-type': 'application/x-amz-json-1.1', 'content-length': '532'}, 'RetryAttempts': 0}}

【讨论】:

  • 这是图像+清单的摘要。如果您在构建映像时检查本地 docker 主机,则它具有不同的摘要。我最终只使用图像摘要并将其作为标签应用到图像。
猜你喜欢
  • 2016-11-11
  • 2020-06-10
  • 2018-08-24
  • 2023-03-25
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
相关资源
最近更新 更多