diff --git a/apps/docker_store.py b/apps/docker_store.py index 1ff03d6..62f4b10 100644 --- a/apps/docker_store.py +++ b/apps/docker_store.py @@ -140,7 +140,7 @@ def get_layer_digest(self, diff_id, idx): ["skopeo", "inspect", f"docker://{self._image_ref}"]) image_desc = json.loads(output) for layer in image_desc["Layers"]: - self._layer_digests.append(layer[len(self._SUPPORTED_HASH_TYPE):]) + self._layer_digests.append(layer) if len(self._layer_digests) <= idx: raise Exception("the number of image layer diffIDs and layer digests does not" diff --git a/apps/get_layers_meta.py b/apps/get_layers_meta.py index db4d9d3..eb76310 100644 --- a/apps/get_layers_meta.py +++ b/apps/get_layers_meta.py @@ -64,9 +64,23 @@ def print_layer_details(layer: DockerStore.Layer): image = docker_store.images_by_ref.get(img_uri) if not image: - status("Image metadata are not found in local store; " - f"`SKIP_ARCHS` must be set for the image: {img_uri}", prefix="==== ") - continue + # Docker daemon stores image refs in repositories.json without the docker + # hub prefixes regardless whether an image is specified in a short or full format + # during docker pull or in docker-compose.yml. There are two possible short formats: + # 1. : --> docker.io/library/: + # 2. /: --> docker.io//: + # Let's check if the image hosted in docker/.io and specified in a long format + # matches one of the images stored in the local docker store and references in + # the short form. + for docker_hub_prefix in ["docker.io/library/", "docker.io/"]: + if img_uri.startswith(docker_hub_prefix): + image = docker_store.images_by_ref.get(img_uri[len(docker_hub_prefix):]) + if image: + break + if not image: + status("Image metadata are not found in local store; " + f"`SKIP_ARCHS` must be set for the image: {img_uri}", prefix="==== ") + continue status(f"Image: {img_uri}", prefix="==== ") for layer in image.layers: