Skip to content

[shared] restaurar o S3 de integração: imagens minio/minio e minio/mc não são mais baixáveis do Docker Hub #1026

Description

@GabrielAderaldo

🎯 Problema (uma frase, sem ambiguidade)

As imagens minio/minio e minio/mc pinadas no compose.yaml deixaram de ser acessíveis no Docker Hub, e o workflow integration falha todo dia na main desde 2026-09-12 nos jobs que sobem o MinIO.

📍 Localização

🔍 Atual vs. Esperado

Descrição
Hoje (atual) docker compose up minio falha com pull access denied for minio/minio; jobs integração (storage), (logo), (photo) e (gate) vermelhos
Esperado o compose sobe um S3-compatível pinado por digest, de fonte acessível, e os quatro jobs voltam ao verde

🧠 Por quê (causa-raiz + impacto)

  • Causa-raiz: os repositórios minio/minio e minio/mc não respondem mais publicamente no Docker Hub — pull e docker manifest inspect falham inclusive pelos digests pinados (denied: requested access to the resource is denied / unauthorized: authentication required). Não é rate limit nem credencial do runner: reproduz numa máquina de dev.
  • Regra/princípio violado: política de regressão zero (CLAUDE.md) — main vermelha há semanas; ADR-0019 (MinIO como S3 de dev/teste) e ADR-0011 (pin de imagem) assumem uma fonte que deixou de existir.
  • Impacto: três suítes de integração (storage, logo, photo) sem execução em CI desde 2026-09-12 — regressão em storage passa sem aviso; todo PR mostra o integration vermelho, o que treina o time a ignorar o check. Clone novo sem cache local também não sobe o MinIO.

🔁 Reprodução / evidência

$ docker manifest inspect minio/minio@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e
errors:
denied: requested access to the resource is denied
unauthorized: authentication required

$ docker manifest inspect minio/mc@sha256:a7fe349ef4bd8521fb8497f55c6042871b2ae640607cf99d9bede5e9bdf11727
(mesmo erro)
  • Log do CI (run 36911994405, job integração (storage)): minio Error pull access denied for minio/minio, repository does not exist or may require 'docker login'.
  • gh run list --workflow integration: último sucesso em 2026-09-11 (main); falha diária no schedule da main de 2026-09-12 em diante, sempre nos mesmos 4 jobs.

✅ Critérios de aceite

  • CA1 — Dado um runner sem cache de imagens, Quando node scripts/ci/test-integration.ts storage roda, Então o serviço S3 sobe saudável e a suíte passa (idem logo e photo).
  • CA2 — Dado o compose.yaml, Quando se inspeciona a imagem do serviço S3 e do bootstrap, Então ambas estão pinadas por digest de uma fonte acessível sem login, e docker manifest inspect <imagem@digest> responde 0.
  • CA3 — Dado a troca de fonte/imagem, Quando o PR é revisado, Então há justificativa de supply-chain (ADR-0011 §5: mantenedor, atividade, alternativa) e, se a escolha mudar o que o ADR-0019 decidiu, um ADR novo que o supersedes.
  • CA4 (erro) — Dado a imagem nova indisponível, Quando o compose sobe, Então o job falha no pull com mensagem explícita (não fica "healthy" sem S3) — o comportamento fail-closed atual se preserva.

🧪 Definition of Done

  • Workflow integration verde na main (schedule) e no PR do conserto, nos jobs storage, logo, photo e gate.
  • Gate verde: pnpm run typecheck + pnpm run format:check + pnpm run lint + pnpm test.
  • Sem regressão — contagem de testes ≥ baseline.
  • Decisão de fonte registrada (ADR novo se mudar o ADR-0019).

🏷️ Classificação

  • Tipo: bug
  • Severidade: alta (CI da main vermelho há semanas; storage sem cobertura de integração)
  • Tamanho estimado: M
  • dedup-key: shared:ci:minio-image-unavailable

Activity

  1. GabrielAderaldo commented on Oct 1, 2026

    @GabrielAderaldo
    ContributorAuthor

    Investigação: causa e hipóteses testadas em containers isolados

    Causa

    A MinIO apagou os repositórios minio/minio e minio/mc do Docker Hub em 2026-09-11 (entre 18:31 e 19:36 UTC), sem anúncio oficial. Isso fecha uma sequência:

    • out/2025: a edição comunitária passa a ser "source-only", sem imagens nem binários publicados;
    • dez/2025: entra em modo manutenção;
    • 2026: os repositórios minio/minio e minio/mc são arquivados (o GitHub mostra archived: true, último push em 2026-04-24).

    O espelho quay.io/minio/* também não serve: medido aqui, docker pull quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z responde unauthorized. Fixar outra tag ou outro digest não resolve.

    Fontes: StableBuild, vonng.com, byteiota, milvus#53430.

    Método

    Dois harnesses, um container isolado por candidato.

    1. API S3: as 4 suítes reais do CI: s3.integration, van-storage.s3.integration, profile-photo-storage.s3.integration e logo-storage.s3.integration.
    2. Compatibilidade com o compose.yaml de dev:
      • credenciais por MINIO_ROOT_*_FILE;
      • curl + /minio/health/ready dentro da imagem;
      • o command: server /data --console-address ":9001";
      • bootstrap mc (mb, version enable, anonymous set download) seguido de GET anônimo.

    Controle: a imagem original (minio/minio@sha256:14cea493…, ainda em cache local) passou em tudo: 22/22 nas suítes e 4/4 no compose. O harness está validado.

    Resultados

    Hipótese Imagem Pull anônimo Suítes S3 Drop-in no compose Licença · manutenção
    H1 espelho oficial quay.io/minio/minio ❌ unauthorized — — —
    H2 Bitnami legacy bitnamilegacy/minio ✅ ✅ 22/22 ⚠️ não: com o command do compose o container morre; sem ele passa em tudo (inclusive *_FILE); caminho de dados muda congelada, sem patches (anúncio da Bitnami, ago/2025)
    H3 fork Silo pgsty/silo ✅ ✅ 22/22 ✅ 4/4 sem mudar nada além da imagem AGPL-3.0 (igual ao MinIO); fork ativo, releases mensais (última RELEASE.2026-09-16)
    H4 MinIO do fonte build local da tag RELEASE.2025-10-15T17-29-55Z n/a (build de 2m26s) ✅ 22/22 ✅ 4/4 AGPL-3.0; upstream arquivado: ninguém corrige CVE, o build fica conosco
    H5 RustFS rustfs/rustfs ✅ ✅ 22/22 ⚠️ não lê MINIO_ROOT_*_FILE (usa RUSTFS_*); bootstrap e envs a refazer Apache-2.0; muito ativo (34k★)
    H6 SeaweedFS chrislusf/seaweedfs ✅ ✅ 22/22 (com -s3.config em JSON) ❌ outro modelo de credencial e de comando Apache-2.0; maduro (desde 2014, 35k★)

    Cliente mc para o bootstrap: pgsty/mc (AGPL-3.0) e bitnamilegacy/minio-client funcionam contra o controle e contra os candidatos MinIO-compatíveis.

    Não testado aqui: o no-new-privileges do compose. O Docker local é snap e não executa nenhum container com essa flag (nem alpine). Fica para o CI do PR do conserto provar.

    Recomendação

    H3 (Silo + pgsty/mc) como conserto imediato. É a única opção ao mesmo tempo drop-in (troca só a linha image: dos dois serviços), mantida e com a mesma licença já analisada no ADR-0019. Pins multi-arch (amd64 + arm64) medidos hoje:

    image: pgsty/silo:latest@sha256:635197cb9f36d01bee221d34d1c7d7960f6a95c48b0b6c01d99cd13bdae51a46
    image: pgsty/mc:latest@sha256:cfc83108c3abb371f8fb84d99c1fdc88f8c237e022409b0081fb7c0a3be634dd

    Ponto fraco declarado: é um fork de um mantenedor principal (bus factor baixo), criado em out/2025.

    Saída de médio prazo, se esse risco não for aceito: H5 (RustFS, Apache-2.0, comunidade grande). Exige reescrever o serviço e o bootstrap no compose, e um ADR que supersede o ADR-0019 na escolha do S3 de dev.

    H2 está descartada: é imagem congelada, sem patches. H4 está descartada: compilar um upstream arquivado nos põe na posição de mantenedores de segurança de um servidor S3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions