badges/shields · error · InvalidResponse

digest not found for given tag

Error message

digest not found for given tag

What it means

This InvalidResponse is thrown when a tag is found in the Docker Hub response and the tag has images, but none of them matches the requested arch (version.images.find(i => i.architecture === arch) is undefined), so the digest for the tag cannot be determined. Docker Hub data is present but does not satisfy the combination of tag and arch the user asked for.

Source

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

        .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',
        })
      }
      const { digest } = image
      return { version: getDigestSemVerMatches({ data, digest }) }
    }
  }

  async handle({ user, repo, tag }, { sort, arch }) {
    let data, pagedData

    if (!tag && sort === 'date') {
      data = await this.fetch({ user, repo })
      if (data.count === 0) {
        throw new NotFound({ prettyMessage: 'repository not found' })
      }
      if (data.results[0].name === 'latest') {
        pagedData = await getMultiPageData({

View on GitHub (pinned to 766fd8bc89)

Solutions

  1. Verify on Docker Hub that the requested tag ships an image for the requested arch.
  2. Omit the arch parameter to accept the default resolution path.
  3. Choose a newer or multi-arch tag that includes the architecture.
  4. Correct architecture naming (amd64 vs x86_64, arm64 vs aarch64).

Example fix

// before
/badge/docker/v/_/myrepo/1.2.0?arch=arm64   // 1.2.0 built for amd64 only
// after
/badge/docker/v/_/myrepo/1.3.0?arch=arm64
Defensive patterns

Strategy: validation

Validate before calling

// verify tag+arch combo before requesting
const tagData = await fetch(`https://hub.docker.com/v2/repositories/${user}/${repo}/tags/${tag}`).then(r => r.json());
const hasArch = tagData.images?.some(i => i.architecture === arch);
if (!hasArch) throw new Error(`tag ${tag} has no ${arch} image`);

Type guard

function tagHasArch(tagEntry, arch) {
  return Array.isArray(tagEntry?.images) && tagEntry.images.some(i => i.architecture === arch);
}

Prevention

When it happens

Trigger: Requesting /docker/v/<user>/<repo>/<tag> with an arch query param when that specific tag has no image built for that architecture (images exist for the tag, just not for the requested arch).

Common situations: Single-arch images (e.g. an old tag built only for amd64) requested with arch=arm64; architecture names differing between old/new Docker images; requesting a historic tag before multi-arch builds were introduced.

Related errors


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