@VisibleForTesting
    static synchronized ImageNameSubstitutor instance(ClassLoader classLoader) {
        if (instance == null) {
            ImageNameSubstitutor configuredInstance = getImageNameSubstitutor(classLoader);

            if (configuredInstance != null) {
                log.debug(
                    "Attempting to instantiate an ImageNameSubstitutor with class: {}",
                    configuredInstance.getClass().getCanonicalName()
                );

                log.info("Found configured ImageNameSubstitutor: {}", configuredInstance.getDescription());

                instance =
                    new ChainedImageNameSubstitutor(
                        wrapWithLogging(defaultImplementation),
                        wrapWithLogging(configuredInstance)
                    );
            } else {
                instance = wrapWithLogging(defaultImplementation);
            }

            log.info("Image name substitution will be performed by: {}", instance.getDescription());
        }

        return instance;
    }
An image name substitutor converts a Docker image name, as may be specified in code, to an alternative name.
This is intended to provide a way to override image names, for example to enforce pulling of images from a private
registry.
<p>
This is marked as @{@link UnstableAPI} as this API is new. While we do not think major changes will be required, we
will react to feedback if necessary.
core/src/main/java/org/testcontainers/utility/ImageNameSubstitutor.java