Skip to content

Fix CI image builds#1399

Merged
ian-noaa merged 2 commits into
developmentfrom
fix-manifest-unknown-errors
May 12, 2026
Merged

Fix CI image builds#1399
ian-noaa merged 2 commits into
developmentfrom
fix-manifest-unknown-errors

Conversation

@ian-noaa
Copy link
Copy Markdown
Collaborator

@ian-noaa ian-noaa commented May 12, 2026

It looks like GHCR is serving up the attestation/provenance manifest instead of the actual image. Add a multiarch build to the home app, and disable attestations & SBOMs in the MATS single arch images to make the image retrievable by docker pull.

This is most likely a result of switching to buildx & docker build-push-action. (Introduced in #1393) However, it may also be related to docker's switch from Moby to containerd as the storage engine.

It looks like GHCR is serving up the attestation/provenance manifest
instead of the actual image. Hopefully having a multiarch build will
make the image retrievable.
@ian-noaa ian-noaa self-assigned this May 12, 2026
@ian-noaa ian-noaa linked an issue May 12, 2026 that may be closed by this pull request
@ian-noaa
Copy link
Copy Markdown
Collaborator Author

Inspecting the manifest before & after adding a multiarch build:

➜ docker manifest inspect ghcr.io/noaa-gsl/mats/development/home:development                                                
manifest unknown
➜ docker buildx imagetools inspect ghcr.io/noaa-gsl/mats/development/home:development
Name:      ghcr.io/noaa-gsl/mats/development/home:development
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:1c7cc5a95d4b363c2417ca30c8a975a30661ff2e755321f639d7aff1a9c5e610
           
Manifests: 
  Name:        ghcr.io/noaa-gsl/mats/development/home:development@sha256:80656394d3d81c06753fd05f0fdf32117c2a3c68ec7489765864eea0e079e122
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
               
  Name:        ghcr.io/noaa-gsl/mats/development/home:development@sha256:25e3fe7bb02a59f8e944b44e66528a99a879768ee68b8a4dd0d1bd30e1b6d899
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest: sha256:80656394d3d81c06753fd05f0fdf32117c2a3c68ec7489765864eea0e079e122
    vnd.docker.reference.type:   attestation-manifest

after:

➜ docker manifest inspect ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors         
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.oci.image.index.v1+json",
   "manifests": [
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 3507,
         "digest": "sha256:45fd0f627c374aa2316a60192de6696dfa1a3cdf3d489a1171b66a57c987e2e8",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 3507,
         "digest": "sha256:13cf1c8bfb4767422bdaad4818f1afac1feb0801848a26b69bedb5007278f524",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 565,
         "digest": "sha256:5743bf53958347a3b9660a996176c86cddd4272b39a42ad83832d987b14389d9",
         "platform": {
            "architecture": "unknown",
            "os": "unknown"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 565,
         "digest": "sha256:6545a41ddd56fc84b2bc9b22eb9d1823ca7680c21fcfc95ea47270e5125c011b",
         "platform": {
            "architecture": "unknown",
            "os": "unknown"
         }
      }
   ]
}
➜ docker buildx imagetools inspect ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors
Name:      ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:bc1081a41366a47162184460558b9e3b95cd41a009b5f968ccff807e9c4006e7
           
Manifests: 
  Name:        ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors@sha256:45fd0f627c374aa2316a60192de6696dfa1a3cdf3d489a1171b66a57c987e2e8
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
               
  Name:        ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors@sha256:13cf1c8bfb4767422bdaad4818f1afac1feb0801848a26b69bedb5007278f524
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64
               
  Name:        ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors@sha256:5743bf53958347a3b9660a996176c86cddd4272b39a42ad83832d987b14389d9
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest: sha256:45fd0f627c374aa2316a60192de6696dfa1a3cdf3d489a1171b66a57c987e2e8
    vnd.docker.reference.type:   attestation-manifest
               
  Name:        ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors@sha256:6545a41ddd56fc84b2bc9b22eb9d1823ca7680c21fcfc95ea47270e5125c011b
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest: sha256:13cf1c8bfb4767422bdaad4818f1afac1feb0801848a26b69bedb5007278f524
    vnd.docker.reference.type:   attestation-manifest

I suspect the docker client is expecting a single-arch build to not be wrapped in these attestation blocks.

They appear to be confusing the docker client and result in "manifest
unknown" errors when doing docker pulls
@ian-noaa ian-noaa marked this pull request as draft May 12, 2026 04:29
@ian-noaa
Copy link
Copy Markdown
Collaborator Author

For the MATS fixes - simply removing the attestation, and not doing a multiarch build:

Before:

docker manifest inspect ghcr.io/noaa-gsl/mats/development/radar:development         
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.oci.image.index.v1+json",
   "manifests": [
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 3343,
         "digest": "sha256:5c7e52d289a42c27f22dac606bdddf95a08ad16357ff873c222f46234299f77a",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 565,
         "digest": "sha256:4b9224c2a480dab8d659e68998dfbc48f86006469aff5119dc5a725047855851",
         "platform": {
            "architecture": "unknown",
            "os": "unknown"
         }
      }
   ]
}docker buildx imagetools inspect ghcr.io/noaa-gsl/mats/development/radar:development                
Name:      ghcr.io/noaa-gsl/mats/development/radar:development
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:30e206609e285daeb0c7084ff9dbc168fccd00f3d7adf483d7df9daa10a405a2
           
Manifests: 
  Name:        ghcr.io/noaa-gsl/mats/development/radar:development@sha256:5c7e52d289a42c27f22dac606bdddf95a08ad16357ff873c222f46234299f77a
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
               
  Name:        ghcr.io/noaa-gsl/mats/development/radar:development@sha256:4b9224c2a480dab8d659e68998dfbc48f86006469aff5119dc5a725047855851
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest: sha256:5c7e52d289a42c27f22dac606bdddf95a08ad16357ff873c222f46234299f77a
    vnd.docker.reference.type:   attestation-manifest

After:

docker manifest inspect ghcr.io/noaa-gsl/mats/development/radar:fix-manifest-unknown-errors         
{
        "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:5c8e8f8719f9c67d56c7e6e5a09cd9a1eb208c297fb39a7ecf57e677b6829590",
                "size": 15731
        },
        "layers": [
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:9b02e9fcb40102eae20d9d1fc7594b44328f4a3eb9b8a3bdb7db283d10840a30",
                        "size": 28236282
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:5d4a3aa5a9ad18507bf18000f0280556365b57788f03aca635c4792a79799082",
                        "size": 3319
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:22c736fe2dee42f2274e133f0fd657bc3a2661f48b034a8adc2ba40bb6fa4b82",
                        "size": 49837385
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:dad35d9305371ac05c2bdf6de63217e78a5906a5f0335bd26432bbee187aea33",
                        "size": 1712697
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:079e3008b73419a93cb985863971162eb59bcb78e57f6ef558fc198ad2848d89",
                        "size": 450
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:3610d9e135371d7bcdfdd66cf5c107f77135210e5d947d38e0a198af47c8a8ca",
                        "size": 26820114
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:eaeb64e870aa0fde35026788dfb9ef508977eb0f3876a525eae1a187485ee32a",
                        "size": 7000417
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:174b123497fbaddb53c8e934ba1ccd8eba2066b68cb58ce5c6e0c54ce280aa43",
                        "size": 9656068
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:f35455497fbc7cc9e434775f72f59986e44e286be5938e7cf5ee44ab3c608096",
                        "size": 21435598
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:32c5457d5ee878dde933187415cb4a1d3bc5605ef411f8ab52e9a5282cce8713",
                        "size": 3517625
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:4545443ec35681f08164b4c46fdaac147f9916ebf7f1d2537e5f8a38332b0374",
                        "size": 90031667
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:9a81ccca818a8696b08092bf4eeca8a56de303562e52795eeade7d99924cce15",
                        "size": 727
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:4626ae9481d0d4af2cbd3e90b232c6d228be76d30fda1fe6de6adaa032078973",
                        "size": 266
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:a45f2597bdfcf9aaa6fa6674337822ff09f040a48685f3681045b48ef3c1ccc1",
                        "size": 10981331
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1",
                        "size": 32
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "digest": "sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1",
                        "size": 32
                }
        ]
}docker buildx imagetools inspect ghcr.io/noaa-gsl/mats/development/radar:fix-manifest-unknown-errors
Name:      ghcr.io/noaa-gsl/mats/development/radar:fix-manifest-unknown-errors
MediaType: application/vnd.docker.distribution.manifest.v2+json
Digest:    sha256:c9e907bc315c2636951be8d7e764840e550c543680e0d480b0229f92ce1a33fe

@ian-noaa ian-noaa marked this pull request as ready for review May 12, 2026 04:36
@ian-noaa
Copy link
Copy Markdown
Collaborator Author

@mollybsmith-noaa - to test, do:

docker pull ghcr.io/noaa-gsl/mats/development/radar:fix-manifest-unknown-errors
docker pull ghcr.io/noaa-gsl/mats/development/home:fix-manifest-unknown-errors

@ian-noaa ian-noaa requested a review from mollybsmith-noaa May 12, 2026 04:38
Copy link
Copy Markdown
Collaborator

@mollybsmith-noaa mollybsmith-noaa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! Could you make these changes for METexpress as well?

@ian-noaa ian-noaa changed the title Try adding a multiarch build to resolve manifest unknown Fix CI image builds May 12, 2026
@ian-noaa
Copy link
Copy Markdown
Collaborator Author

Thanks! I'll make sure they're accessible as well.

@ian-noaa ian-noaa merged commit 99fa51d into development May 12, 2026
39 checks passed
@ian-noaa ian-noaa deleted the fix-manifest-unknown-errors branch May 12, 2026 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pulling images results in a "manifest unknown" error

2 participants