quarkusio/quarkus · error · java.lang.IllegalArgumentException

Only apicurio/apicurio-registry images are supported

Error message

Only apicurio/apicurio-registry images are supported

What it means

The Apicurio Registry Dev Services container wrapper validates the configured Docker image and only accepts images whose repository contains 'apicurio/apicurio-registry'. Any custom or misnamed image is rejected at build/dev-start time. This guards against images that do not match the expected registry layout.

Source

Thrown at extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/DevServicesApicurioRegistryProcessor.java:189

        private final boolean legacyImage;

        private ApicurioRegistryContainer(DockerImageName dockerImageName, int fixedExposedPort, String serviceName,
                String defaultNetworkId, boolean useSharedNetwork,
                Map<String, String> containerEnv,
                Optional<Duration> timeout) {
            super(dockerImageName);
            this.legacyImage = dockerImageName.getVersionPart().startsWith("2.");
            this.fixedExposedPort = fixedExposedPort;
            this.useSharedNetwork = useSharedNetwork;

            if (serviceName != null) { // Only adds the label in dev mode.
                withLabel(DEV_SERVICE_LABEL, serviceName);
                withLabel(QUARKUS_DEV_SERVICE, serviceName);
            }
            withEnv("QUARKUS_PROFILE", "prod");
            if (!dockerImageName.getRepository().contains("apicurio/apicurio-registry")) {
                throw new IllegalArgumentException("Only apicurio/apicurio-registry images are supported");
            }
            this.hostName = ConfigureUtil.configureNetwork(this, defaultNetworkId, useSharedNetwork, "apicurio-registry");
            withEnv(containerEnv);
            timeout.ifPresent(this::withStartupTimeout);
        }

        @Override
        protected void configure() {
            super.configure();

            if (useSharedNetwork) {
                return;
            }

            if (fixedExposedPort > 0) {
                addFixedExposedPort(fixedExposedPort, APICURIO_REGISTRY_PORT);
            } else {
                addExposedPorts(APICURIO_REGISTRY_PORT);

View on GitHub (pinned to e1c734241f)

Solutions

  1. Use an image whose repository contains 'apicurio/apicurio-registry', e.g. quay.io/apicurio/apicurio-registry:latest-release
  2. If a private mirror is required, re-tag/push the image so the repository path ends with apicurio/apicurio-registry
  3. If you must run a custom image, disable Dev Services (quarkus.apicurio.registry.devservices.enabled=false) and configure the registry URL manually (quarkus.apicurio.registry.url)
  4. Verify the image name property with no typos: check docker.image names in devservices config

Example fix

// before
quarkus.apicurio.registry.devservices.image-name=mycorp-mirror.example.com/schema/apicurio-registry:2.5
// after
quarkus.apicurio.registry.devservices.image-name=quay.io/apicurio/apicurio-registry:2.5
Defensive patterns

Strategy: validation

Validate before calling

String image = ConfigProvider.getConfig()
    .getValue("quarkus.apicurio.registry.devservices.image-name", String.class);
if (image != null && !image.contains("apicurio/apicurio-registry")) {
    throw new IllegalArgumentException(
        "Dev Services only supports apicurio/apicurio-registry images, got: " + image);
}

Type guard

boolean isSupportedRegistryImage(String imageName) {
    return imageName != null && imageName.contains("apicurio/apicurio-registry");
}

Prevention

When it happens

Trigger: Setting quarkus.apicurio.registry.devservices.image-name (or quarkus.devservices.image-name for the registry) to a custom tag or an alternative repository, e.g. quay.io/apicurio/apicurio-registry-native:2.x or a private mirror whose repository path does not literally contain 'apicurio/apicurio-registry'.

Common situations: Pinning an image from a private/mirrored registry (corporate proxy renames the repository), using apicurio-registry-native instead of apicurio-registry, or a typo like apicurio/registry.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/66e0b38d91356a05. Report an issue: GitHub.