diff --git a/src/docker.rs b/src/docker.rs index ab0887f..fbf3159 100644 --- a/src/docker.rs +++ b/src/docker.rs @@ -49,7 +49,7 @@ pub async fn get_images_from_docker_daemon( Some(service_spec) => match &service_spec.task_template { Some(task_spec) => match &task_spec.container_spec { Some(container_spec) => match &container_spec.image { - Some(image) => Image::from_inspect_data(image), + Some(image) => Image::from_inspect_data(ctx, image), None => None, }, None => None, @@ -75,7 +75,7 @@ pub async fn get_images_from_docker_daemon( .collect(); inspects .iter() - .filter_map(|inspect| Image::from_inspect_data(inspect.clone())) + .filter_map(|inspect| Image::from_inspect_data(ctx, inspect.clone())) .collect() } None => { @@ -87,7 +87,7 @@ pub async fn get_images_from_docker_daemon( }; images .iter() - .filter_map(|image| Image::from_inspect_data(image.clone())) + .filter_map(|image| Image::from_inspect_data(ctx, image.clone())) .collect::>() } }; diff --git a/src/structs/image.rs b/src/structs/image.rs index 5617b26..f8b0620 100644 --- a/src/structs/image.rs +++ b/src/structs/image.rs @@ -44,7 +44,7 @@ pub struct Image { impl Image { /// Creates and populates the fields of an Image object based on the ImageSummary from the Docker daemon - pub fn from_inspect_data(image: T) -> Option { + pub fn from_inspect_data(ctx: &Context, image: T) -> Option { let tags = image.tags().unwrap(); let digests = image.digests().unwrap(); if !tags.is_empty() && !digests.is_empty() { @@ -56,7 +56,18 @@ impl Image { let version_tag = Version::from_tag(&tag); let local_digests = digests .iter() - .map(|digest| digest.split('@').collect::>()[1].to_string()) + .filter_map( + |digest| match digest.split('@').collect::>().get(1) { + Some(digest) => Some(digest.to_string()), + None => { + ctx.logger.warn(format!( + "Ignoring invalid digest {} for image {}!", + digest, reference + )); + None + } + }, + ) .collect(); Some(Self { reference,