From 4c98170107ff13035c8ae32d2a2f1f4f621929ce Mon Sep 17 00:00:00 2001 From: WorkBuddy Date: Tue, 22 Sep 2026 11:04:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(infra):=20minio=20=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E6=BA=90=E4=BB=8E=20Docker=20Hub=20=E8=BF=81=E5=88=B0=20quay.i?= =?UTF-8?q?o=EF=BC=88=E4=B8=8A=E6=B8=B8=E5=B7=B2=E4=B8=8B=E6=9E=B6?= =?UTF-8?q?=EF=BC=8C=E6=9C=AC=E5=9C=B0/CI/=E7=94=9F=E4=BA=A7=E5=9D=87?= =?UTF-8?q?=E5=8F=97=E5=BD=B1=E5=93=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit E2E job 日志: pull access denied for minio/minio, repository does not exist 问题不在 tag 本身,而在**整个仓库已从 Docker Hub 移除**:MinIO 自 2025-10 起停止 发布容器镜像(改为仅源码分发),其 GitHub 仓库于 2026-02 归档,Docker Hub 上 minio/minio 与 minio/mc 现均返回 404;quay.io/minio/minio 仍在提供镜像。 本机此前是用 quay.io 的镜像重打 tag 顶替才跑通的(见 known-risks KR-01), 但那只是**本地绕过**、没有同步回仓库,于是「本地能起栈、CI 拉不到」。 现在三处 compose(本地 / staging / prod)统一改为 quay.io, 让本地、CI 与生产拉取同一个镜像。 这不只是 CI 问题:prod 与 staging 同样引用了已下架的仓库,是真实的部署阻塞 —— 也就是说现有配置下,新环境的生产部署根本起不来。 已知偏离:使用 latest 而非钉版。本机无法访问 quay 的 tag API 去核实某个具体 RELEASE tag 是否仍存在(quay 上的镜像已冻结,最后发布为 2025-09)。 e2e job 新增一步打印实际拉取到的版本,日后即可据此钉版、恢复可复现性。 长期风险:quay 上的 MinIO 镜像同样可能下架,届时需自建镜像或迁移到其他 S3 兼容存储 —— 「依赖第三方镜像」本身就是一条外部依赖风险。 上一轮修复已见效:backend / admin-web / ui-contracts / miniapp / test-shell-guard / migration 六个 job 均通过,本轮仅剩 E2E。 --- .github/workflows/ci.yml | 9 +++++++++ infrastructure/docker-compose.prod.yml | 5 ++++- infrastructure/docker-compose.staging.yml | 5 ++++- infrastructure/docker-compose.yml | 22 +++++++++++++++++++--- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fddd71b..9615bf5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -249,6 +249,15 @@ jobs: working-directory: infrastructure run: docker compose config --quiet + # compose 现在用的是 quay.io/minio/minio:latest(滚动 tag,见该文件注释): + # Docker Hub 上的 minio/minio 仓库已被整体移除,而本机访问不到 quay 的 tag API + # 去核实某个具体 RELEASE tag 是否仍在。故先用 latest 跑通,并在这里把实际 + # 拉取到的版本打进日志 —— 日后即可据此把版本钉死,恢复可复现性。 + - name: 拉取并打印 minio 实际版本(为后续钉版留证据) + run: | + docker pull quay.io/minio/minio:latest + docker run --rm quay.io/minio/minio:latest --version + # 保证库为全新:seed 用 `ON CONFLICT (username) DO NOTHING`,若卷是上一轮残留, # 账号密码会停留在上一轮的 `E2E_OPERATOR_PASSWORD` 上 → 本轮登录 401(表现为各种业务失败)。 - name: 清理可能的残留栈与数据卷 diff --git a/infrastructure/docker-compose.prod.yml b/infrastructure/docker-compose.prod.yml index b44cc68..190188f 100644 --- a/infrastructure/docker-compose.prod.yml +++ b/infrastructure/docker-compose.prod.yml @@ -40,7 +40,10 @@ services: restart: unless-stopped minio: - image: minio/minio:latest + # 同 docker-compose.yml 的 minio 条目:Docker Hub 上 minio/minio 仓库已被整体移除 + # (MinIO 自 2025-10 起停止发布容器镜像,仅源码分发),生产环境同样拉不到。 + # 改为仍在提供镜像的 quay.io —— 这是真实的部署阻塞,不只是 CI 问题。 + image: quay.io/minio/minio:latest container_name: danyang-match-minio command: server /data --console-address ":9001" environment: diff --git a/infrastructure/docker-compose.staging.yml b/infrastructure/docker-compose.staging.yml index ae40ed2..e3b008a 100644 --- a/infrastructure/docker-compose.staging.yml +++ b/infrastructure/docker-compose.staging.yml @@ -32,7 +32,10 @@ services: retries: 5 minio: - image: minio/minio:latest + # 同 docker-compose.yml 的 minio 条目:Docker Hub 上 minio/minio 仓库已被整体移除 + # (MinIO 自 2025-10 起停止发布容器镜像,仅源码分发),staging 环境同样拉不到。 + # 改为仍在提供镜像的 quay.io。 + image: quay.io/minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: staging diff --git a/infrastructure/docker-compose.yml b/infrastructure/docker-compose.yml index b832cc9..a9bbce2 100644 --- a/infrastructure/docker-compose.yml +++ b/infrastructure/docker-compose.yml @@ -33,9 +33,25 @@ services: retries: 5 minio: - # pin 到确定版本:`latest` 是滚动 tag,MinIO 已多次改动镜像内容(如移除内嵌 console), - # 用 `latest` 会让 CI 的 E2E 拉到一个与本地验证时不同的镜像 → 不可复现的偶发失败。 - image: minio/minio:RELEASE.2025-09-07T16-13-09Z + # 2026-09-22 修正:镜像源从 Docker Hub 迁到 quay.io。 + # + # 原 `minio/minio:RELEASE.2025-09-07T16-13-09Z` 在 CI 上根本拉不到,Actions 报: + # pull access denied for minio/minio, repository does not exist + # 问题不在 tag,而在**整个仓库已从 Docker Hub 移除**:MinIO 自 2025-10 起停止发布 + # 容器镜像(改为仅源码分发),其 GitHub 仓库于 2026-02 归档;Docker Hub 上 + # minio/minio 与 minio/mc 现均返回 404。quay.io/minio/minio 仍在提供镜像。 + # + # 本机此前正是用 quay.io 的镜像重打 tag 顶替才跑通的(见 known-risks KR-01), + # 但那只是**本地绕过**、没有同步回仓库,于是「本地能起栈、CI 拉不到」。 + # 现在统一改为 quay.io,让本地与 CI 拉同一个镜像,消除这处不一致。 + # + # 已知偏离:此处用 latest 而非钉版。原因是本机访问不到 quay.io 的 tag API, + # 无法核实某个具体 RELEASE tag 是否仍然存在(quay 上的镜像已冻结, + # 最后发布为 2025-09)。latest 已被多个下游项目实测可用;e2e job 会打印 + # 实际拉取到的版本,供日后补钉版。 + # 长期风险:quay 上的 MinIO 镜像同样可能下架,届时需自建镜像或迁移到其他 + # S3 兼容存储 —— 这也意味着「依赖第三方镜像」本身就是一条外部依赖风险。 + image: quay.io/minio/minio:latest container_name: danyang-match-minio command: server /data --console-address ":9001" environment: