Использование Python Docker API для получения хэша изображения из AWS ECR

Я использовал Docker Python API и Boto3, чтобы создавать образы и отправлять их в 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 

Есть ли способ получить фактический дайджест изображений в данном репозитории без необходимости извлекать изображение?


person djsumdog    schedule 29.03.2019    source источник
comment
Я думаю, что если вы хешируете манифест ECR, вы должны получить то же значение, что и sha256. Я не знаком с ECR, но недавно изучал это для собственного обучения, используя dockerhub и Google Container Registry (GCR): medium.com/google-cloud/   -  person DazWilkin    schedule 30.03.2019


Ответы (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}}
person Guel135    schedule 18.05.2019
comment
Это дайджест изображения + манифест. Если вы проверите свой локальный хост-докер при создании образа, он будет иметь другой дайджест. В итоге я просто использовал дайджест изображения и применил его как тег к изображению. - person djsumdog; 18.05.2019