{"record":{"id":"055235621645cfe9","repo":"GoogleContainerTools/jib","slug":"cannot-build-for-multiple-platforms-since-the-base","errorCode":null,"errorMessage":"cannot build for multiple platforms since the base image '%s' is not a manifest list.","messagePattern":"cannot build for multiple platforms since the base image '(.+?)' is not a manifest list\\.","errorType":"exception","errorClass":"PlatformNotFoundInBaseImageException","httpStatus":null,"severity":"error","filePath":"jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/PlatformChecker.java","lineNumber":55,"sourceCode":"   * @param containerConfig container configuration JSON of the base image\n   */\n  static void checkManifestPlatform(\n      BuildContext buildContext, ContainerConfigurationTemplate containerConfig)\n      throws PlatformNotFoundInBaseImageException {\n    Optional<Path> path = buildContext.getBaseImageConfiguration().getTarPath();\n    String baseImageName =\n        path.map(Path::toString)\n            .orElse(buildContext.getBaseImageConfiguration().getImage().toString());\n\n    Set<Platform> platforms = buildContext.getContainerConfiguration().getPlatforms();\n    Verify.verify(!platforms.isEmpty());\n\n    if (platforms.size() != 1) {\n      String msg =\n          String.format(\n              \"cannot build for multiple platforms since the base image '%s' is not a manifest list.\",\n              baseImageName);\n      throw new PlatformNotFoundInBaseImageException(msg);\n    } else {\n      Platform platform = platforms.iterator().next();\n      if (!platform.getArchitecture().equals(containerConfig.getArchitecture())\n          || !platform.getOs().equals(containerConfig.getOs())) {\n\n        // Unfortunately, \"platforms\" has amd64/linux by default even if the user didn't explicitly\n        // configure it. Skip reporting to suppress false alarm.\n        if (!(platform.getArchitecture().equals(\"amd64\") && platform.getOs().equals(\"linux\"))) {\n          String msg =\n              String.format(\n                  \"the configured platform (%s/%s) doesn't match the platform (%s/%s) of the base image (%s)\",\n                  platform.getArchitecture(),\n                  platform.getOs(),\n                  containerConfig.getArchitecture(),\n                  containerConfig.getOs(),\n                  baseImageName);\n          throw new PlatformNotFoundInBaseImageException(msg);\n        }","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/GoogleContainerTools/jib/blob/fb949e2676afbbd7dd7a1ef61e20251931325654/jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/PlatformChecker.java#L37-L73","documentation":"When the build requests multiple platforms, Jib requires the base image to be a manifest list so each platform can resolve its own base variant. PlatformChecker.checkManifestPlatform throws PlatformNotFoundInBaseImageException if the base image resolved to a single manifest (not a manifest list) and more than one platform is configured.","triggerScenarios":"Configuring jib.container.platforms (or `--platform=linux/amd64,linux/arm64`) with 2+ platforms while the base image tag resolves to a single-architecture manifest instead of a multi-arch manifest list.","commonSituations":"Pointing at a tag that isn't multi-arch (e.g. a locally tagged image, `docker://` base image, or a single-arch vendor image); pinning base image by digest to a single manifest; older base images without manifest list support; mixing a docker daemon base image with multi-platform builds.","solutions":["Use a multi-arch base image tag (e.g. eclipse-temurin:17-jammy) whose registry manifest is a manifest list.","Request only one platform when the base image is single-architecture; run separate builds per architecture.","Verify with `docker buildx imagetools inspect <base>` that the base is a manifest list with your target platforms.","Remove the registry digest pin to a single manifest; pin to the manifest-list digest instead.","If using a `docker://` or daemon base image, that can only be single-platform; switch to a registry reference."],"exampleFix":"// before\n<jib.container.platforms>\n  <platform><os>linux</os><architecture>amd64</architecture></platform>\n  <platform><os>linux</os><architecture>arm64</architecture></platform>\n</jib.container.platforms>\n<baseImage>mycompany/base:custom</baseImage> <!-- single-arch -->\n// after: either one platform, or a manifest-list base\n<baseImage>eclipse-temurin:17-jammy</baseImage>","handlingStrategy":"validation","validationCode":"// Verify base image is a manifest list before requesting multiple platforms\nManifestList ml = registry.inspectManifestList(\"eclipse-temurin:17-jammy\");\nif (ml == null) throw new IllegalStateException(\"base is not a manifest list; use one platform\");","typeGuard":"null","tryCatchPattern":"try { /* jib multi-platform build */ } catch (PlatformNotFoundInBaseImageException e) { /* fall back to single-platform build or switch base image */ }","preventionTips":["Verify base images with `docker buildx imagetools inspect` before multi-platform builds","Choose official multi-arch base images","Pin to manifest-list digests, not single-manifest digests","Use one platform per build when stuck with single-arch bases"],"tags":["multi-platform","manifest-list","base-image","arm64"],"backgroundTag":"unsupported-platform","analyzedSha":"fb949e2676afbbd7dd7a1ef61e20251931325654","analyzedAt":"2026-09-06T14:04:09.491Z","contentChangedAt":"2026-09-06T14:04:09.491Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}