{"record":{"id":"45a852616dfa069f","repo":"quarkusio/quarkus","slug":"the-native-binary-produced-by-the-build-is-not-a-l-45a852","errorCode":null,"errorMessage":"The native binary produced by the build is not a Linux binary and therefore cannot be used in a Linux container image. Consider adding \"quarkus.native.container-build=true\" to your configuration.","messagePattern":"The native binary produced by the build is not a Linux binary and therefore cannot be used in a Linux container image\\. Consider adding \"quarkus\\.native\\.container-build=true\" to your configuration\\.","errorType":"console","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/container-image/container-image-jib/deployment/src/main/java/io/quarkus/container/image/jib/deployment/JibProcessor.java","lineNumber":229,"sourceCode":"    public void buildFromNative(ContainerImageConfig containerImageConfig, ContainerImageJibConfig jibConfig,\n            ContainerImageInfoBuildItem containerImage,\n            NativeImageBuildItem nativeImage,\n            OutputTargetBuildItem outputTarget,\n            Optional<ContainerImageBuildRequestBuildItem> buildRequest,\n            Optional<ContainerImagePushRequestBuildItem> pushRequest,\n            List<ContainerImageLabelBuildItem> containerImageLabels,\n            Optional<UpxCompressedBuildItem> upxCompressed, // used to ensure that we work with the compressed native binary if compression was enabled\n            BuildProducer<ArtifactResultBuildItem> artifactResultProducer,\n            BuildProducer<ContainerImageBuilderBuildItem> containerImageBuilder) {\n\n        boolean buildContainerImage = buildContainerImageNeeded(containerImageConfig, buildRequest);\n        boolean pushContainerImage = pushContainerImageNeeded(containerImageConfig, pushRequest);\n        if (!buildContainerImage && !pushContainerImage) {\n            return;\n        }\n\n        if (!NativeBinaryUtil.nativeIsLinuxBinary(nativeImage)) {\n            throw new RuntimeException(\n                    \"The native binary produced by the build is not a Linux binary and therefore cannot be used in a Linux container image. Consider adding \\\"quarkus.native.container-build=true\\\" to your configuration\");\n        }\n\n        JibContainerBuilder jibContainerBuilder = createContainerBuilderFromNative(jibConfig, containerImageConfig,\n                nativeImage, containerImageLabels);\n        setUser(jibConfig, jibContainerBuilder);\n        setPlatforms(jibConfig, jibContainerBuilder);\n        handleExtraFiles(outputTarget, jibContainerBuilder);\n\n        log.info(\"Starting (local) container image build for native binary using jib.\");\n        JibContainer container = containerize(containerImageConfig, jibConfig, containerImage, jibContainerBuilder,\n                pushContainerImage);\n        writeOutputFiles(container, jibConfig, outputTarget);\n\n        artifactResultProducer.produce(new ArtifactResultBuildItem(null, \"native-container\",\n                Map.of(\"container-image\", container.getTargetImage().toString(), \"pull-required\",\n                        \"\" + pushContainerImage)));\n        containerImageBuilder.produce(new ContainerImageBuilderBuildItem(JIB));","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/container-image/container-image-jib/deployment/src/main/java/io/quarkus/container/image/jib/deployment/JibProcessor.java#L211-L247","documentation":"When building a container image from a native binary with Jib, Quarkus checks that the native binary is a Linux executable, since the container image is Linux-based. If the binary was built for the local OS (macOS/Windows), Jib cannot package it, so the build throws this RuntimeException suggesting quarkus.native.container-build=true.","triggerScenarios":"Building natively on macOS or Windows without -Dquarkus.native.container-build=true, then running a Jib container-image build (quarkus.container-image.build=true with the jib extension) from the produced binary.","commonSituations":"Local Mac/Windows native builds followed by Jib packaging; CI pipelines where the native step missed container-build; switching from docker to jib extension without changing the native build setup.","solutions":["Rebuild with -Dquarkus.native.container-build=true so the native binary is compiled inside a Linux (container) environment","Or perform the native build in a Linux CI runner/container and package with Jib from there","Set quarkus.native.container-build=true persistently in application.properties for local builds intended for containers","Verify the binary with 'file target/*-runner' — it should say 'ELF 64-bit' before running the Jib build"],"exampleFix":"# before\n./mvnw package -Dnative -Dquarkus.container-image.build=true\n# after\n./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true","handlingStrategy":"validation","validationCode":"Path runner = Path.of(\"target\", \"my-app-runner\");\nString out = new String(ProcessHelpers.exec(\"file\", runner.toString()));\nif (!out.contains(\"ELF\")) {\n    throw new IllegalStateException(\"Native binary is not a Linux ELF; rebuild with -Dquarkus.native.container-build=true\");\n}","typeGuard":"boolean isLinuxElf(Path binary) throws IOException, InterruptedException {\n    Process p = new ProcessBuilder(\"file\", binary.toString()).redirectErrorStream(true).start();\n    String out = new String(p.getInputStream().readAllBytes());\n    p.waitFor();\n    return out.contains(\"ELF\");\n}","tryCatchPattern":"try {\n    jibNativeBuild();\n} catch (RuntimeException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"not a Linux binary\")) {\n        throw new IllegalStateException(\"Rebuild with quarkus.native.container-build=true before Jib packaging\", e);\n    }\n    throw e;\n}","preventionTips":["Set quarkus.native.container-build=true whenever the container image is built from a native binary","Confirm with 'file target/*-runner' that the output is ELF before Jib packaging","Build native binaries in Linux environments (CI runners or in-container builds)","Document the container-build flag in project build instructions for macOS/Windows developers"],"tags":["jib","native-image","cross-platform","graalvm","container-image"],"backgroundTag":"native-binary-not-linux","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"}