Skip to content

Ubuntu 26.04 (Resolute) arm32 base images missing v7 variant in OCI image config #7053

@lbussell

Description

@lbussell

The nightly pipeline is failing for .NET 11 arm32 Ubuntu Resolute (26.04) images because the upstream base image ubuntu.azurecr.io/ubuntu:resolute no longer includes the v7 variant in its OCI image config or manifest index platform entries.

Failing build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2914276&view=results

ImageBuilder's ValidatePlatformIsCompatibleWithBaseImage check fails:

Unhandled exception: System.InvalidOperationException: Platform 'src/runtime-deps/11.0/resolute/arm32v7/Dockerfile'
is configured with an architecture that is not compatible with the base image
'msdotnetcontainersstaging.azurecr.io/mirror/ubuntu.azurecr.io/ubuntu:resolute':
Manifest platform:
    Architecture: ARM
    Variant: v7
Base image:
    Architecture: ARM
    Variant:

RCA

Canonical changed the build system for Resolute images on ubuntu.azurecr.io from Docker to rockcraft/umoci. Inspecting image history (docker image history $digest) confirms the build tool change. The new build (published 2026-02-27 ~09:02 UTC) does not set the variant field in the image config or manifest index.

Only Resolute (26.04) is affected. Noble (24.04) and Jammy (22.04) on the same registry still use Docker-based builds and correctly include the variant. Docker Hub ubuntu:resolute images are also unaffected.

Example commands to show image variants
OLD_ACR="ubuntu.azurecr.io/ubuntu@sha256:11d1bb93e2924502b4fc297dd225151b5b6477521dfdd6f092d5b920f4cf0dc2"
echo "Previous image ($OLD_ACR)"
oras manifest fetch "$OLD_ACR" --pretty | jq '.manifests[] | select(.platform.architecture=="arm") | .platform'

NEW_ACR="ubuntu.azurecr.io/ubuntu@sha256:671eb73c0246efadd5bcbc700c5e4f44cb5b046019769dce7649accbec5211a5"
echo "Current image ($NEW_ACR)"
oras manifest fetch "$NEW_ACR" --pretty | jq '.manifests[] | select(.platform.architecture=="arm") | .platform'

DOCKERHUB="docker.io/library/ubuntu@sha256:fed6ddb82c61194e1814e93b59cfcb6759e5aa33c4e41bb3782313c2386ed6df"
echo "DockerHub image ($DOCKERHUB)"
oras manifest fetch "$DOCKERHUB" --pretty | jq '.manifests[] | select(.platform.architecture=="arm") | .platform'

Output:

Previous image (ubuntu.azurecr.io/ubuntu@sha256:11d1bb93e2924502b4fc297dd225151b5b6477521dfdd6f092d5b920f4cf0dc2)
{
  "os": "linux",
  "architecture": "arm",
  "variant": "v7"
}
Current image (ubuntu.azurecr.io/ubuntu@sha256:671eb73c0246efadd5bcbc700c5e4f44cb5b046019769dce7649accbec5211a5)
{
  "architecture": "arm",
  "os": "linux"
}
DockerHub image (docker.io/library/ubuntu@sha256:fed6ddb82c61194e1814e93b59cfcb6759e5aa33c4e41bb3782313c2386ed6df)
{
  "architecture": "arm",
  "os": "linux",
  "variant": "v7"
}

Possible Workarounds for .NET

  1. Wait for a (potential) fix from Canonical. However, this may be an intentional change.
  2. Relax Image Builder validation to allow treat missing variant as compatible with v7 for arm architecture.
  3. Temporarily skip the resolute arm32v7 build.

Metadata

Metadata

Assignees

Labels

area-dockerfilesConcerns the official .NET Dockerfiles or Dockerfile templatesuntriaged

Type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions