{"record":{"id":"d37219587faca26d","repo":"quarkusio/quarkus","slug":"only-official-eclipse-mosquitto-images-are-support","errorCode":null,"errorMessage":"Only official eclipse-mosquitto images are supported","messagePattern":"Only official eclipse-mosquitto images are supported","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/smallrye-reactive-messaging-mqtt/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/mqtt/deployment/MqttDevServicesProcessor.java","lineNumber":189,"sourceCode":"        private ConfiguredMqttContainer(\n                DockerImageName dockerImageName,\n                int fixedExposedPort,\n                String serviceName,\n                String defaultNetworkId,\n                boolean useSharedNetwork) {\n            super(dockerImageName);\n            this.port = fixedExposedPort;\n            this.useSharedNetwork = useSharedNetwork;\n            withExposedPorts(MQTT_PORT);\n            if (serviceName != null) { // Only adds the label in dev mode.\n                withLabel(DEV_SERVICE_LABEL, serviceName);\n                withLabel(QUARKUS_DEV_SERVICE, serviceName);\n            }\n            withClasspathResourceMapping(\"mosquitto.conf\",\n                    \"/mosquitto/config/mosquitto.conf\",\n                    BindMode.READ_ONLY);\n            if (!dockerImageName.getRepository().endsWith(\"eclipse-mosquitto\")) {\n                throw new IllegalArgumentException(\"Only official eclipse-mosquitto images are supported\");\n            }\n            this.hostName = ConfigureUtil.configureNetwork(this, defaultNetworkId, useSharedNetwork, \"mqtt\");\n        }\n\n        @Override\n        protected void configure() {\n            super.configure();\n            if (port > 0) {\n                addFixedExposedPort(port, MQTT_PORT);\n            }\n        }\n\n        @Override\n        public String getConnectionInfo() {\n            return DevServicesHostUtil.formatPrefixedAuthority(\"mqtt\", getEffectiveHost(), getPort());\n        }\n\n        @Override","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/smallrye-reactive-messaging-mqtt/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/mqtt/deployment/MqttDevServicesProcessor.java#L171-L207","documentation":"Dev Services for MQTT starts an eclipse-mosquitto container via Testcontainers. The ConfiguredMqttContainer constructor validates the configured Docker image repository and rejects anything that is not an official eclipse-mosquitto image, because the injected mosquitto.conf and startup logic only work with that image layout.","triggerScenarios":"Setting quarkus.rabbitmq / mqtt dev service image (quarkus.smallrye-reactive-messaging.mqtt.devservices.image-name) to a non-official image whose repository does not end with 'eclipse-mosquitto', e.g. a private registry image or a forked/rebuilt image, while Dev Services is active (dev mode or tests with no broker URL configured).","commonSituations":"Pointing image-name at a corporate registry mirror (mycompany.com/mqtt), using a custom mosquitto fork, or typos like 'eclipse/mosquitto'.","solutions":["Use an official eclipse-mosquitto image, e.g. eclipse-mosquitto:2.0","If you must use a mirror, ensure the repository still ends with eclipse-mosquitto (e.g. registry/example.com/eclipse-mosquitto:2.0)","Disable Dev Services or point quarkus.smallrye-reactive-messaging.mqtt.url to an external broker to skip container startup"],"exampleFix":"// before\nquarkus.smallrye-reactive-messaging.mqtt.devservices.image-name=mycompany/mqtt-broker:latest\n// after\nquarkus.smallrye-reactive-messaging.mqtt.devservices.image-name=eclipse-mosquitto:2.0","handlingStrategy":"validation","validationCode":"String image = ConfigProvider.getConfig().getValue(\"quarkus.smallrye-reactive-messaging.mqtt.devservices.image-name\", String.class);\nif (image != null && !image.split(\":\")[0].endsWith(\"eclipse-mosquitto\")) {\n    throw new IllegalStateException(\"Dev Services MQTT requires an official eclipse-mosquitto image, got: \" + image);\n}","typeGuard":"static boolean isOfficialMosquitto(String imageName) {\n    if (imageName == null) return true;\n    String repo = imageName.split(\":\")[0];\n    return repo.endsWith(\"eclipse-mosquitto\");\n}","tryCatchPattern":"try {\n    startDevService();\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"eclipse-mosquitto\")) {\n        log.error(\"Unsupported MQTT dev-service image; use an official eclipse-mosquitto image\");\n    }\n    throw e;\n}","preventionTips":["Only override the dev-services image with official eclipse-mosquitto tags","If using a registry mirror, keep the repository ending in eclipse-mosquitto","Disable Dev Services and use an external broker URL if a custom broker image is required"],"tags":["devservices","testcontainers","mqtt","config"],"backgroundTag":"unsupported-docker-image","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}