Problem
WUD can generate a burst of registry requests large enough for GHCR to return HTTP 429 during a scheduled scan. Reports of this behavior commonly affect groups of ghcr.io/linuxserver/* images at the same time, while other checks may still succeed.
The current WUD 8.3.1 scan path appears to amplify registry request volume:
- The Docker watcher checks containers concurrently with
Promise.all(...).
findNewVersion() calls registryProvider.getTags(container.image) even for a non-semver tag such as latest, where the useful operation is a digest comparison for the current tag.
getTags() follows every registry pagination link.
- Digest watching then adds manifest requests.
- Registry requests surface HTTP 429 immediately; there is no bounded retry/backoff that honors
Retry-After.
The result can be a large concurrent burst of tag-list pages and manifest calls, leaving throttled containers unchecked until a later successful scan.
Why LinuxServer images are an important example
LinuxServer.io is one of the most widely used Docker image publishers, so this workload is worth accounting for explicitly rather than treating it as an unusual edge case.
Many LinuxServer repositories have deep tag histories. For example, the public GHCR endpoint for linuxserver/bazarr returns a pagination link even when requesting 1,000 tags, meaning WUD must make additional requests to enumerate the complete tag list. Watching several LinuxServer images multiplies that pagination cost.
LinuxServer images expose the problem disproportionately, but the underlying behavior can affect any popular publisher or deployment watching many images from one registry.
Expected behavior
A scheduled scan should avoid overwhelming one registry, and a transient 429 should not leave a group of popular images unchecked without a bounded retry.
Suggested fix / configurable settings
Could WUD implement the following?
- Skip full tag enumeration when the configured tag is non-semver and only the current-tag digest is needed.
- Add a configurable per-registry concurrency limit, with a conservative default.
- Retry HTTP 429 with bounded exponential backoff and jitter, honoring
Retry-After when present.
- Preserve successful container results while retrying or deferring only throttled checks.
A targeted per-container check or fair retry ordering could complement this, but reducing the request burst is the primary fix.
Reproduction outline
- Configure WUD 8.3.1 to watch many GHCR images, including several
ghcr.io/linuxserver/*:latest images with digest watching.
- Run a scheduled watcher scan.
- Observe registry request volume and HTTP 429 responses affecting some LinuxServer checks.
- Run again after the throttle window clears; the same checks may succeed without a credential change.
Related issues
This request overlaps with, but is not fully covered by:
Those issues address adjacent sources or consequences of request volume. This issue focuses on the scheduled scan itself: unnecessary full tag enumeration, unbounded per-registry concurrency, and missing 429 backoff.
Problem
WUD can generate a burst of registry requests large enough for GHCR to return HTTP 429 during a scheduled scan. Reports of this behavior commonly affect groups of
ghcr.io/linuxserver/*images at the same time, while other checks may still succeed.The current WUD 8.3.1 scan path appears to amplify registry request volume:
Promise.all(...).findNewVersion()callsregistryProvider.getTags(container.image)even for a non-semver tag such aslatest, where the useful operation is a digest comparison for the current tag.getTags()follows every registry pagination link.Retry-After.The result can be a large concurrent burst of tag-list pages and manifest calls, leaving throttled containers unchecked until a later successful scan.
Why LinuxServer images are an important example
LinuxServer.io is one of the most widely used Docker image publishers, so this workload is worth accounting for explicitly rather than treating it as an unusual edge case.
Many LinuxServer repositories have deep tag histories. For example, the public GHCR endpoint for
linuxserver/bazarrreturns a pagination link even when requesting 1,000 tags, meaning WUD must make additional requests to enumerate the complete tag list. Watching several LinuxServer images multiplies that pagination cost.LinuxServer images expose the problem disproportionately, but the underlying behavior can affect any popular publisher or deployment watching many images from one registry.
Expected behavior
A scheduled scan should avoid overwhelming one registry, and a transient 429 should not leave a group of popular images unchecked without a bounded retry.
Suggested fix / configurable settings
Could WUD implement the following?
Retry-Afterwhen present.A targeted per-container check or fair retry ordering could complement this, but reducing the request burst is the primary fix.
Reproduction outline
ghcr.io/linuxserver/*:latestimages with digest watching.Related issues
This request overlaps with, but is not fully covered by:
Those issues address adjacent sources or consequences of request volume. This issue focuses on the scheduled scan itself: unnecessary full tag enumeration, unbounded per-registry concurrency, and missing 429 backoff.