Skip to content

build: pull MinIO from quay.io instead of Docker Hub - #1178

Merged
fuziontech merged 2 commits into
mainfrom
james/minio-quay-registry
Sep 11, 2026
Merged

build: pull MinIO from quay.io instead of Docker Hub#1178
fuziontech merged 2 commits into
mainfrom
james/minio-quay-registry

Conversation

@fuziontech

@fuziontech fuziontech commented Sep 11, 2026

Copy link
Copy Markdown
Member

Summary

  • Point every minio/minio and minio/mc reference at quay.io
  • Pin dated release tags instead of latest
  • Run mc from its image, replacing the dl.min.io download that now 410s

Why

MinIO deleted its Docker Hub repositories. This is not a rate limit and not an auth problem, despite the error text:

docker: Error response from daemon: pull access denied for minio/minio,
repository does not exist or may require 'docker login'

The Hub API agrees they are gone:

https://hub.docker.com/v2/repositories/minio/minio/  -> 404 {"message":"object not found"}
https://hub.docker.com/v2/repositories/minio/mc/     -> 404
quay.io/minio/minio -> 200      quay.io/minio/mc -> 200

This currently turns controlplane-tests and integration-tests red on every branch.

The client binary is gone too. https://dl.min.io/client/mc/release/linux-arm64/mc returns 410 Gone:

The open-source MinIO Server, MinIO Client (mc) and MinIO KES projects are archived and no longer maintained.

So the CI step that installed mc could not work either. It was also failing badly rather than loudly: curl -sL without -f writes the 410 body to /tmp/mc, and the step then chmods and executes an HTML page. That step now runs mc from the quay.io image instead.

quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z resolves to digest sha256:14cea493d9a34af32..., the same image the Hub served before removal. So this changes where we pull from, not what we run.

Tags are dated releases rather than latest, so a later rebuild cannot change the image underneath us.

Production risk

None. Every reference changed is a local compose file or CI service container. No shipped image or runtime path pulls MinIO.

Start here

  1. tests/integration/docker-compose.yml and docker-compose.yaml — the two that gate CI.
  2. .github/workflows/ci.yml — already pointed at quay.io but on latest; now pinned.

Skip k8s/local-config-store.compose.yaml, which is the same substitution.

Test plan

Run locally against the real images:

  • The ci.yml sequence verbatim: MinIO healthy in 2s, bucket created, rerun is idempotent via --ignore-existing, bucket confirmed present
  • docker compose -f tests/integration/docker-compose.yml up minio minio-init: bucket, policy trino-ducklake-read, user trino-reader and its attachment all succeed, exit code 0
  • CI on this PR exercises the same images through controlplane-tests and integration-tests

Note on overlap

#1174 carries the same registry move bundled with its perf-test work, using the same two tags. This PR is the standalone repair so CI can go green without waiting on that one. #1174 should rebase cleanly, or drop its copy.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WCY5Jf2BQPCVKJTZU1TpEe

MinIO deleted its Docker Hub repositories. Both `minio/minio` and
`minio/mc` now return 404 from the Hub API, and every pull fails with
"repository does not exist or may require 'docker login'", which reads
like an auth problem but is not one. This turns controlplane-tests and
integration-tests red on every branch.

The images are still published to quay.io, so point every reference
there. Pin a dated release tag rather than `latest` so a later rebuild
cannot change the image underneath us. The minio tag resolves to the
same digest the Hub served before it was removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCY5Jf2BQPCVKJTZU1TpEe
@github-actions

Copy link
Copy Markdown

Test Impact Plan

Deterministic summary of how this PR changes tests, CI runners, and coverage-risk signals.

Summary

Area Added Changed Deleted
Test files 0 1 0
E2E/journey files 0 0 0
Workflow files 0 1 0

Signals

  • Test cases: +0 / -0
  • Assertions: +0 / -0
  • Skips or known failures added: 0
  • Workflow continue-on-error added: 0
  • Workflow path filters added: 0
  • Test commands removed from justfile: 0
  • E2E/journey retry lines added: 0

Coverage risk: neutral or increased

No coverage-reduction warnings detected.

dl.min.io now returns 410 Gone. MinIO archived the community mc client
alongside the Docker Hub images, so the CI step that installed the
binary cannot work either. Worse, `curl -sL` without -f writes the 410
body to /tmp/mc and the step then chmods and runs an HTML page.

Run mc from the quay.io image this branch already pins. Joining the
MinIO container's network namespace keeps the endpoint on its internal
port, so the step no longer depends on the published one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCY5Jf2BQPCVKJTZU1TpEe
@fuziontech
fuziontech merged commit a4fe011 into main Sep 11, 2026
24 checks passed
@fuziontech
fuziontech deleted the james/minio-quay-registry branch September 11, 2026 22:52
@bill-ph

bill-ph commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

fyi: switching to a maintained fork of minio #1175

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.

2 participants