单节点本地 S3 中 MinIO 的替代方案
2025 年底,MinIO 背后的公司 决定 放弃 这个项目,转而追求其他商业利益。 这不仅惹恼了一大批用户,也让许多依赖 MinIO 在本地模拟 S3 存储的软件演示陷入尴尬,更别提那些用它来验证 S3 兼容性的构建流水线了。
这篇文章里,我来介绍一些 MinIO 的替代方案。
MinIO 的能力远不止"在演示中模拟 S3",但这里我关注的是最简单的替代品。 具体来说,标准如下:
-
必须提供 Docker 镜像。
-
太多演示都以 Docker Compose 形式发布,除非实在没办法,没人想自己构建 Docker 镜像。
-
-
必须兼容 S3。
-
这些演示里用 MinIO,就是为了代替真实的 S3 写入。
-
-
必须免费使用,最好采用开源许可(符合 OSI 定义),例如 Apache 2.0。
-
单节点部署下应该简单易用。
-
应该有清晰、活跃的社区和/或商业支持方。
-
谁都能用 vibe coding 搞出一堆没人维护的垃圾代码,或者一时兴起 fork 一个项目——但 MinIO 一直经受住了时间的考验,我们不想到半年后又要重来一遍。
-
-
如果开发者体验(DX)出色、配置流畅、文档完善等,则是加分项。
| 我只关注单节点本地 S3 的使用场景。 下文讨论的不少工具功能广泛,S3 支持只是其中之一;另一些则只提供 S3 功能。 对我来说两者都可以,只要额外的功能和特性不会增加部署的复杂度或负担就行。 |
本文不涉及多节点部署、分布式存储、生产环境支持成本或 GUI 功能等。也就是说,这篇文章并非写给那些在生产环境中将 MinIO 作为自管 S3 解决方案的用户看的。不过,如果你在这方面有相关经验或建议,欢迎在下方留言 :)
| 本项目的全部代码见 此仓库。 |
MinIO 基准测试 🔗
起步配置是一个简单的 Docker Compose 组合:用 DuckDB 读写存储于 S3 上的 Iceberg 数据,其中 S3 服务由 MinIO 提供。
代码在 这里。
Docker Compose 配置如下:
-
DuckDB 以及 Iceberg REST Catalog
-
MinIO(本地 S3 存储)
-
mc,这是 MinIO 的命令行工具,用于自动创建数据桶。
当向 DuckDB 插入数据时:
INSERT INTO cat.test.products VALUES
(1, 'Widget', 9.99),
(2, 'Gadget', 19.99),
(3, 'Doohickey', 14.99);
数据最终会以 Iceberg 格式写入 S3(在此环境中即 MinIO):
$ mc ls minio/warehouse/test/products/data/
[2026-01-12 14:35:55 UTC] 693B STANDARD 019bb2a2-8ad5-7159-968c-3693c3578902.parquet
[2026-01-12 14:35:55 UTC] 2.7KiB STANDARD 188ee032-8576-4f46-9834-1cac6d3080a3-m0.avro
[2026-01-12 14:35:55 UTC] 1.6KiB STANDARD snap-2633370813252912097-95ad4df0-3243-4cfb-a736-8f785aac100c.avro
在构建的每个示例中,都可以运行 test.sh 进行验证。
❯ ./test.sh
░▒▓██████████████████████████████████████████████████▓▒░
▒ ▒
▓ ___ ▓▓▓▓▓ ▓
█ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █
█ \ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █
█ --- └───────────┘ ▓▓ MinIO ▒▒▒ █
▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓
▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒
░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░
░▒▓██████████████████████████████████████████████████▓▒░
1. Checking MinIO buckets (before)...
[2026-01-14 12:48:41 UTC] 0B warehouse/
2. Creating Iceberg table and inserting data...
[…]
3. Verifying data in DuckDB...
[…]
┌───────┬───────────┬───────────────┐
│ id │ name │ price │
│ int32 │ varchar │ decimal(10,2) │
├───────┼───────────┼───────────────┤
│ 1 │ Widget │ 9.99 │
│ 2 │ Gadget │ 19.99 │
│ 3 │ Doohickey │ 14.99 │
└───────┴───────────┴───────────────┘
4. Checking MinIO bucket contents (after)...
[2026-01-14 12:49:07 UTC] 493B STANDARD data/019bbc8d-7d44-7b6b-af71-0ab99d3a0124.parquet
[2026-01-14 12:49:07 UTC] 2.7KiB STANDARD data/c37ab68c-8aaf-44a4-88e6-bc02a01daf5c-m0.avro
[2026-01-14 12:49:07 UTC] 1.6KiB STANDARD data/snap-1988745121468861337-95e77212-9571-423f-bb71-ce8f1b4282f0.avro
[2026-01-14 12:49:07 UTC] 1.0KiB STANDARD metadata/00000-8bf22118-d262-47a9-986c-721d2b99a846.metadata.json
[2026-01-14 12:49:07 UTC] 1.7KiB STANDARD metadata/00001-5cad6fc5-fe54-41bc-8131-4d6f900d20e7.metadata.json
MinIO 的替代方案 🔗
下面来看看 MinIO 有哪些替代方案,以及用它们替换 MinIO 有多容易。
我拿上面的项目做了尝试,尽量减少改动来接入 MinIO 的替代品。
MinIO 的 S3 客户端 mc 我保留了,因为如果你想彻底移除 MinIO,换成 s3cmd、aws CLI 之类的工具也很容易。
S3Proxy 🔗
测试版本:3.0.0
-
✅ Docker 镜像(拉取量超 500 万)
-
✅ 许可证:Apache 2.0
-
✅ S3 兼容性
配置难度:👍👍
上手非常简单,看起来是个不错的轻量级选择。
| 不过我注意到一点:S3Proxy 依赖的项目之一 jclouds 已于 2025 年年中移入 Apache Attic(即已退役)——当然,如果你只用本地存储,这大概也无伤大雅? |
RustFS 🔗
测试版本:1.0.0-alpha.79
配置难度:✅✅
-
✅ Docker 镜像(拉取量超 10 万)
-
✅ 许可证:Apache 2.0
-
✅ S3 兼容性
| 需要注意的是,RustFS 最近被爆出一个相当严重的安全漏洞,让一些人对它望而却步。 官网看起来挺像样,但好几个链接都指向同一个页面,透着一股新项目"刚刷完漆"的味道 :) 如果后续切换起来方便的话,对 demo 场景来说问题不大。 另外该项目目前还处于 'alpha' 阶段。 |
RustFS 还自带图形界面:
SeaweedFS 🔗
测试版本:4.06
-
✅ Docker 镜像(拉取量超 500 万)
-
✅ 许可证:Apache 2.0
-
✅ S3 兼容性
配置难度:👍(很简单)
这份快速入门指南对于让 S3 基础功能跑起来很有帮助。(话虽如此,我最终还是让 Claude 帮我实现了……)。总体而言,这里需要改动的东西不多;基本就是直接替换 Docker 镜像,相当直白。不过鉴权需要单独的配置文件(和 Garage 一样,我把它内联写在了 Docker Compose 里)。
编辑:博客刚发出来,该项目团队就回复说他们会移除这个额外要求,让它更容易使用!太酷了 :)
这已在 https://t.co/RQv387bbKb 中完成,并将包含在每周版本中。
— SeaweedFS (@SeaweedFS) 2026年1月14日
SeaweedFS 自带一个基础 UI,用起来很方便:
SeaweedFS 官网看起来有点冷清,乍一看你很容易误以为它不是开源项目,因为页面上有“定价”选项,首页标题也是“SeaweedFS Enterprise”(我甚至没找到 GitHub 链接!)。 但它确实是个久经沙场的 OSS 项目:SeaweedFS 从 2018 年的 0.91 版本起就支持 S3 了。 你可以通过这些 幻灯片进一步了解 SeaweedFS,其中包括一张 与 MinIO 的对比图表。
Zenko CloudServer 🔗
测试版本:9.2.8
-
✅ Docker 镜像(Docker Hub 上还有旧版本,拉取量超 500 万)
-
✅ 许可证:Apache 2.0
-
✅ S3 兼容性
配置难度:👍 简单
CloudServer 曾用名 S3 Server,是 Scality 公司发布的工具集 Zenko 的一部分。它可以很容易地替代 MinIO,但起初我有点难以理清这些名称(cloudserver/zenko/scality)以及实际需要运行的是哪个软件。此外,文档中还链接了一个过时的 Docker 镜像,体验稍显怪异。
Garage ️
配置难度:😵 复杂
测试版本:1.0.0
这一步我找朋友帮忙才搞定。除了 garage 容器本身,还需要另一个容器进行初始配置,以及一个 TOML 配置文件。为了简洁,我把配置内容直接内联写进了 Docker Compose 文件中。
如果我坐下来仔细读文档(RTFM),也能自己搞定吗?能。但我的时间难道没有更好的用途吗?确实有。
所以,Garage 确实能用,但天哪……代码改动上它绝不是那种即插即用的替代品。
初始化需要不同的配置流程,而且这套流程本身也不简单。
举个简单的例子:The specified key ID is not a valid Garage key ID (starts with GK, followed by 12 hex-encoded bytes)。
这种设计对生产环境来说很规范……但对本地 demo 来说纯属多余,说实话还挺碍事的。
| 这个评价公平吗? 如果把它当作一项独立的新技术来看,那完全不公平! 很多优秀的技术,尤其是支持分布式部署的,配置学习曲线都很陡。 但我的需求是找一个简单的 MinIO 替代品——Garage 并不符合。 |
Apache Ozone 🔗
测试版本:2.1.0
-
✅ Docker 镜像(拉取量 100 万+)
-
✅ 许可证:Apache 2.0
-
✅ S3 兼容性
Ozone 最初在 2015 年作为 HDFS 项目的一部分创建,2020 年从 Apache Hadoop(还记得它吗?)独立了出来。
配置难度:😵
它确实能替代 MinIO,但绝对算不上轻量级方案;无论是我还是 Claude,都没法找到少于四个节点的部署方式。 它浑身散发着浓重的 Hadoop 味道,就我这个使用场景来说,我是不会急着采用它的。
Ceph Object Gateway 🔗
看了一眼安装说明,我直接劝退了!
Ozone 和上面提到的方案都偏重型。我确信它们在各自擅长的领域都很出色,但都不适合作为轻量级容器直接嵌入我的 Docker Compose 本地演示环境。
对比 🔗
大家都喜欢看横向评测图表,对吧?
| 名称 | 配置便捷性 | 许可证 | 商业支持与治理模式 | Docker 拉取量1 | GitHub Star 数 | 首次提交时间 | 主要贡献者 |
|---|---|---|---|---|---|---|---|
|
(Git 仓库) |
👍👍 |
Apache 2.0 |
单贡献者(Andrew Gaul) |
2014 年 |
|||
|
(Git 仓库) |
👍👍 |
Apache 2.0 |
2024 年 |
||||
|
(Git 仓库) |
👍 |
Apache 2.0 |
2012 年 |
||||
👍 |
Apache 2.0 |
Scality(商业公司) |
5M+(旧版本) |
2015 |
|||
|
(Git 仓库) |
😬 |
AGPL |
NGI/NLnet 资助 |
2020 |
|||
|
(Git 仓库) |
lol |
Apache 2.0 |
Apache 软件基金会 |
2018 |
1 Docker 拉取量是一个有用的参考指标,但并非绝对指标。因为少量下游项目若经常通过 CI/CD 流水线使用该镜像,很容易扭曲这一数据。
总结 🔗
写这篇博客其实有点跑题,起因是我想更新一个演示,而目前该演示使用的是 MinIO。 那么,试用之后,我最终会选择哪些方案呢?
-
SeaweedFS - 是。
-
S3Proxy - 是。
-
RustFS - 也许吧,但项目很新且仅为 alpha 版本。
-
CloudServer - 是,可能吧?说实话,它作为整套套件的一部分让人有些望而却步,我担心得理解其他组件才能使用它——不过这种顾虑多半是多虑了。
-
Garage - 否,配置对我来说太复杂。
-
Apache Ozone - 哈哈,否。
我对那些没给 yes 的方案并无贬低之意;它们很可能都是优秀的工程,只是没有聚焦于我的核心场景(简单、易于配置的单机本地 S3)。
在选择 MinIO 的替代品时,还有几点需要留意:
-
治理。这些项目虽然都是开源的,但只有 Ozone 归基金会(ASF)所有。其他项目理论上都可能随时改许可证(MinIO 就是这么干的)。
-
社区健康度。"巴士系数"如何?上面有几个项目历史悠久、运转良好,但核心维护者只有一个人。如果他哪天弃坑了,社区里会有人 fork 出来继续积极维护吗?
补充 🔗
-
2026-01-30:Justin Cormack 撰文介绍了 RustFS 和 Garage 的实现细节与功能
-
2026-03-02:Ruohang Feng fork 了 MinIO,创建了 pgsty/minio,并承诺持续维护一个稳定、已修补 CVE 的发行版。