badges/shields · error · InvalidResponse

no images found for arch ${arch}

Error message

no images found for arch ${arch}

What it means

This InvalidResponse is thrown by the Docker Hub version service's transform step when the user requests a badge filtered by CPU architecture (e.g. arch=arm64) with sort=semver and no tag, but none of the tag listing entries returned by the Docker Hub API contain an image with that architecture. It signals that the requested arch does not exist among the images of any matching tag, so no semver-ordered version can be computed. It is a response-validity error, not a client error in the badge server itself.

Source

Thrown at services/docker/docker-version.service.js:140

    if (!tag && sort === 'date') {
      version = data.results[0].name
      if (version !== 'latest') {
        return { version }
      }
      const imageTag = data.results[0].images.find(i => i.architecture === arch) // Digest is the unique field that we utilise to match images
      if (!imageTag) {
        throw new InvalidResponse({
          prettyMessage: 'digest not found for latest tag',
        })
      }
      const { digest } = imageTag
      return { version: getDigestSemVerMatches({ data: pagedData, digest }) }
    } else if (!tag && sort === 'semver') {
      const matches = data
        .filter(d => d.images.some(image => image.architecture === arch))
        .map(d => d.name)
      if (matches.length === 0) {
        throw new InvalidResponse({
          prettyMessage: `no images found for arch ${arch}`,
        })
      }
      return { version: latest(matches) }
    } else {
      version = data.find(d => d.name === tag)
      if (!version) {
        throw new NotFound({ prettyMessage: 'tag not found' })
      }
      if (Object.keys(version.images).length === 0) {
        return { version: version.name }
      }
      const image = version.images.find(i => i.architecture === arch)
      if (!image) {
        throw new InvalidResponse({
          prettyMessage: 'digest not found for given tag',
        })
      }

View on GitHub (pinned to 766fd8bc89)

Solutions

  1. Check the arch query parameter spelling against Docker Hub's architecture values (amd64, arm, arm64, 386, ppc64le, s390x).
  2. Inspect the repository on Docker Hub to confirm images exist for the requested arch; remove or correct the arch param if not.
  3. Use a tag-agnostic query first to list available architectures, then pick a supported one.

Example fix

// before
/badge/docker/v/_/myrepo?sort=semver&arch=x86_64
// after
/badge/docker/v/_/myrepo?sort=semver&arch=amd64
Defensive patterns

Strategy: validation

Validate before calling

const VALID_ARCHES = ['386','amd64','arm','arm64','ppc64le','s390x'];
if (!VALID_ARCHES.includes(arch)) {
  throw new Error(`arch must be one of ${VALID_ARCHES.join(', ')}, got: ${arch}`);
}

Type guard

function isValidArch(arch) {
  return ['386','amd64','arm','arm64','ppc64le','s390x'].includes(arch);
}

Prevention

When it happens

Trigger: Calling the docker version badge endpoint without a tag and with sort=semver and an arch query param whose value matches no image architecture in any tag returned by Docker Hub (data.filter(d => d.images.some(i => i.architecture === arch)) yields zero matches).

Common situations: Typo in the arch query parameter (e.g. arch=x86 instead of amd64, arch=arm instead of arm64); the repository publishes only multi-arch manifests under names the filter doesn't see; the image was built for a single arch; Docker Hub response schema changes.

Related errors


AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30). Data as JSON: /api/errors/807547dbe0b693e6. Report an issue: GitHub.