GoogleContainerTools/jib · error · UnknownManifestFormatException

Invalid container configuration in Docker V2.2/OCI manifest:

Error message

Invalid container configuration in Docker V2.2/OCI manifest: 
<manifest JSON>

What it means

Jib pulled a Docker V2.2/OCI manifest for the base image, but the manifest's container configuration blob is missing or has no digest. Preconditions.checkArgument enforces schema version 2, and a schema-2 manifest must reference a config; its absence means the manifest is malformed, so UnknownManifestFormatException is thrown with the full manifest JSON.

Source

Thrown at jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/PullBaseImageStep.java:406

   * @param registryClient to communicate with remote registry
   * @param progressDispatcherFactory the {@link ProgressEventDispatcher.Factory} for emitting
   *     {@link ProgressEvent}s
   * @return pulled {@link ContainerConfigurationTemplate}
   * @throws IOException when an I/O exception occurs during the pulling
   * @throws LayerPropertyNotFoundException if adding image layers fails
   */
  private ContainerConfigurationTemplate pullContainerConfigJson(
      ManifestAndDigest<?> manifestAndDigest,
      RegistryClient registryClient,
      ProgressEventDispatcher.Factory progressDispatcherFactory)
      throws IOException, LayerPropertyNotFoundException, UnknownManifestFormatException {
    BuildableManifestTemplate manifest =
        (BuildableManifestTemplate) manifestAndDigest.getManifest();
    Preconditions.checkArgument(manifest.getSchemaVersion() == 2);

    if (manifest.getContainerConfiguration() == null
        || manifest.getContainerConfiguration().getDigest() == null) {
      throw new UnknownManifestFormatException(
          "Invalid container configuration in Docker V2.2/OCI manifest: \n"
              + JsonTemplateMapper.toUtf8String(manifest));
    }

    try (ThrottledProgressEventDispatcherWrapper progressDispatcherWrapper =
        new ThrottledProgressEventDispatcherWrapper(
            progressDispatcherFactory,
            "pull container configuration " + manifest.getContainerConfiguration().getDigest())) {

      String containerConfigString =
          Blobs.writeToString(
              registryClient.pullBlob(
                  manifest.getContainerConfiguration().getDigest(),
                  progressDispatcherWrapper::setProgressTarget,
                  progressDispatcherWrapper::dispatchProgress));
      return JsonTemplateMapper.readJson(
          containerConfigString, ContainerConfigurationTemplate.class);
    }

View on GitHub (pinned to fb949e2676)

Solutions

  1. Inspect the manifest served for the base image (docker manifest inspect / crane manifest) and confirm it has a valid config.digest
  2. Check any registry mirror/proxy in the config (e.g. Docker Hub mirrors, Artifactory) and try pulling directly from the upstream registry
  3. Re-push or fix the base image with a conformant tool (docker push, crane) so the manifest includes a container configuration
  4. Use a different, well-known base image tag

Example fix

// before (build.gradle)
from { image = 'my-mirror.internal/jdk:8' }  // mirror serves broken manifest
// after
from { image = 'openjdk:8' }                 // upstream registry, valid manifest
Defensive patterns

Strategy: try-catch

Validate before calling

crane manifest $BASE_IMAGE | jq -e '.config.digest'

Prevention

When it happens

Trigger: pullContainerConfigJson receives a manifest where getContainerConfiguration() is null or getContainerConfiguration().getDigest() is null; typically caused by a registry serving a non-standard or corrupted manifest for the base image reference.

Common situations: Pointing jib at a registry/proxy (mirror, Artifactory, Nexus) that rewrites or truncates manifests; using a base image pushed by a non-Docker/OCI-conformant tool; registry serving schema 1 or an unexpected media type despite the manifest claiming v2.2.

Related errors


AI-assisted analysis of GoogleContainerTools/jib@fb949e2676 (2026-09-06). Data as JSON: /api/errors/6e334408cb966c7f. Report an issue: GitHub.