Skip to content

ci: pull base images through mirror.gcr.io - #64

Merged
guillaume-sainthillier merged 1 commit into
mainfrom
ci/pull-through-mirror
Oct 12, 2026
Merged

guillaume-sainthillier merged 1 commit into
mainfrom
ci/pull-through-mirror

Conversation

@guillaume-sainthillier

Copy link
Copy Markdown
Member

Every main run since #60 failed with 429 Too Many Requests while resolving the base images (mlocati/php-extension-installer, php, dunglas/frankenphp), so nothing was published: Docker Hub still serves the images from before #57, #58 and #59.

Pull request runs kept passing because they pull anonymously, each runner from its own IP. Push runs log in, so all their pulls count against the one Docker Hub account. Since #60 builds each architecture separately, a full run makes about twice as many of them, and five merges within half an hour (#60, #58, #59, #57, #63) exhausted the quota.

  • BuildKit pulls docker.io images through mirror.gcr.io (buildkitd-config-inline), Google's public Docker Hub mirror. It has all 21 base images used by the 8.1–8.6 Dockerfiles, serves the same digests as Docker Hub (checked for php:8.5-apache, php:8.6-rc-alpine, dunglas/frankenphp:1-php8.5-bookworm, mlocati/php-extension-installer:latest), and falls back to Docker Hub on a miss. The Docker Hub login is still used to push.
  • The publish job drops imagetools inspect, one more authenticated manifest request per image.

Checked locally with a builder using the same config, on a machine that Docker Hub currently answers with 429: dunglas/frankenphp:1-php8.5-bookworm resolved and pulled through the mirror. This PR changes the workflow, so it rebuilds every image; the publish half runs once merged.

Since builds run once per architecture (#60), every main run makes about
twice as many authenticated Docker Hub pulls, all counted against the one
account the jobs log in with. Five merges within half an hour exhausted
its quota: every main run since then failed with 429 Too Many Requests
while resolving the base images, and nothing was published. Pull request
runs, which pull anonymously from separate runner IPs, kept passing.

BuildKit now pulls docker.io images through mirror.gcr.io, which serves
the same digests (checked for php, dunglas/frankenphp and
mlocati/php-extension-installer) and falls back to Docker Hub on a miss.
The login is still used to push. The publish job also drops its
imagetools inspect, one more manifest request per image.
@guillaume-sainthillier
guillaume-sainthillier merged commit eff9a92 into main Oct 12, 2026
55 checks passed
@guillaume-sainthillier
guillaume-sainthillier deleted the ci/pull-through-mirror branch October 12, 2026 14:22
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.

1 participant