diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index 13addcd106334ce28c424fa1aa5264d7d4d9daf5..277de66e8a97d22ec04cbacc4d5743cd6621dbd8 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -9,16 +9,27 @@ import { ensureTrailingSlash } from '../../url'; import { rawExec } from '../common'; import type { DockerOptions, Opt, VolumeOption, VolumesPair } from '../types'; -const prefetchedImages = new Set<string>(); +const prefetchedImages = new Map<string, string>(); + +const digestRegex = regEx('Digest: (.*?)\n'); export async function prefetchDockerImage(taggedImage: string): Promise<void> { if (prefetchedImages.has(taggedImage)) { - logger.debug(`Docker image is already prefetched: ${taggedImage}`); + logger.debug( + `Docker image is already prefetched: ${taggedImage}@${prefetchedImages.get( + taggedImage + )}` + ); } else { logger.debug(`Fetching Docker image: ${taggedImage}`); - prefetchedImages.add(taggedImage); - await rawExec(`docker pull ${taggedImage}`, { encoding: 'utf-8' }); - logger.debug(`Finished fetching Docker image`); + const res = await rawExec(`docker pull ${taggedImage}`, { + encoding: 'utf-8', + }); + const imageDigest = digestRegex.exec(res?.stdout)?.[1] ?? 'unknown'; + logger.debug( + `Finished fetching Docker image ${taggedImage}@${imageDigest}` + ); + prefetchedImages.set(taggedImage, imageDigest); } }