quarkusio/quarkus · error · RuntimeException

The container with the label '" + DEV_SERVICE_LABEL + "' is

Error message

The container with the label '" + DEV_SERVICE_LABEL + "' is not compatible with Dev Services for Kubernetes. Stop it or disable Dev Services for Kubernetes.

What it means

Dev Services for Kubernetes starts (or reuses) a container labeled with its DEV_SERVICE_LABEL, which must be a supported local cluster image (kind, or a kube-apiserver image). If a container carrying that label exists but has an unrecognized image, the kubeconfig cannot be extracted, so this RuntimeException is thrown.

Source

Thrown at extensions/kubernetes-client/deployment/src/main/java/io/quarkus/kubernetes/client/deployment/DevServicesKubernetesProcessor.java:482

        private KubeConfig getKubeconfigFromContainer() {
            var image = getContainerInfo().getConfig().getImage();
            String connectionAddress = resolvedConnectionAddress();
            if (image.contains("rancher/k3s")) {
                return KubeConfigUtils
                        .parseKubeConfig(KubeConfigUtils.replaceServerInKubeconfig("https://" + connectionAddress,
                                getFileContentFromContainer(K3S_KUBECONFIG)));
            } else if (image.contains("kindest/node")) {
                return KubeConfigUtils
                        .parseKubeConfig(KubeConfigUtils.replaceServerInKubeconfig("https://" + connectionAddress,
                                getFileContentFromContainer(KIND_KUBECONFIG)));
            } else if (image.contains("k8s.gcr.io/kube-apiserver") ||
                    image.contains("registry.k8s.io/kube-apiserver")) {
                return getKubeconfigFromApiContainer(connectionAddress);
            }

            // this can happen only if the user manually start
            // a DEV_SERVICE_LABEL labeled container with an invalid image name
            throw new RuntimeException("The container with the label '" + DEV_SERVICE_LABEL
                    + "' is not compatible with Dev Services for Kubernetes. Stop it or disable Dev Services for Kubernetes.");
        }

        public Map<String, String> getKubeconfig() {
            return getKubernetesClientConfigFromKubeConfig(getKubeconfigFromContainer());
        }

        protected KubeConfig getKubeconfigFromApiContainer(final String url) {
            final Cluster cluster = new Cluster();
            cluster.setName(APISERVER);
            cluster.setCluster(new ClusterSpec());
            cluster.getCluster().setServer(url);
            cluster.getCluster().setCertificateAuthorityData((base64(getFileContentFromContainer(API_SERVER_CA))));
            final User user = new User();
            user.setName(APISERVER);
            user.setUser(new UserSpec());
            user.getUser().setClientKeyData(base64(getFileContentFromContainer(API_SERVER_KEY)));
            user.getUser().setClientCertificateData(base64(getFileContentFromContainer(API_SERVER_CERT)));

View on GitHub (pinned to e1c734241f)

Solutions

  1. Stop and remove the offending container: docker ps --filter label=<DEV_SERVICE_LABEL> then docker rm -f <container>.
  2. Disable Dev Services for Kubernetes (quarkus.kubernetes-client.devservices.enabled=false) if you manage your own cluster.
  3. Restart Docker/Podman and let Dev Services recreate a proper kind container on the next build/test run.

Example fix

// before
docker run -l quarkus-dev-service.kubernetes my-random-image // breaks discovery
// after
docker rm -f my-random-container
quarkus.kubernetes-client.devservices.enabled=false // or let Dev Services start kind itself
Defensive patterns

Strategy: validation

Validate before calling

// Find labeled containers and verify their image before relying on Dev Services
for (Container c : dockerClient.listContainers()) {
    for (String lbl : c.getLabels().keySet()) {
        if (lbl.startsWith("quarkus-dev-service.kubernetes")) {
            if (!c.getImage().contains("kindest/node")
                    && !c.getImage().contains("registry.k8s.io/kube-apiserver")) {
                throw new IllegalStateException("Incompatible labeled container: " + c.getId()
                    + " image=" + c.getImage() + " — remove it or disable dev services");
            }
        }
    }
}

Try / catch

try {
    runTests();
} catch (RuntimeException e) {
    if (e.getMessage().contains("not compatible with Dev Services for Kubernetes")) {
        exec("docker", "ps", "-q", "--filter", "label=quarkus-dev-service.kubernetes")
            .forEach(id -> exec("docker", "rm", "-f", id));
        runTests();
    } else { throw e; }
}

Prevention

When it happens

Trigger: A Docker/Podman container with the Dev Services for Kubernetes label exists whose image is neither the expected kind image nor registry.k8s.io/kube-apiserver — typically because the user manually started or relabeled such a container.

Common situations: User manually ran a container with the quarkus dev-service label; leftover/renamed containers from a previous Quarkus version; label applied via docker-compose or custom scripts.

Related errors


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