Source: helpers/dockerService/serviceComponents/imageUtils.js

import { docker } from "../dockerService";

/**
 * Check whether an image exists locally.
 * @param {string} imageName - Image name or tag
 * @returns {Promise<boolean>}
 */
export async function imageExists(imageName) {
  const images = await docker.listImages();
  return images.some(img =>
    (img.RepoTags || []).includes(imageName) ||
    (img.RepoDigests || []).some(d => d.includes(imageName))
  );
}

/**
 * Pull an image from the registry.
 * @param {string} imageName - Image name to pull
 * @returns {Promise<void>}
 */
export async function pullImage(imageName) {
  await new Promise((resolve, reject) => {
    docker.pull(imageName, (err, stream) => {
      if (err) return reject(new Error('Error pulling image: ' + err.message));
      docker.modem.followProgress(stream, (pullErr) => {
        if (pullErr) reject(new Error('Error during pull: ' + pullErr.message));
        else resolve();
      });
    });
  });
}