← 文章 / 云原生与基础设施
Hacker News 2小时前 · 2026-09-15 22:07:36 · 1 阅读

单节点本地 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 配置如下:

  1. DuckDB 以及 Iceberg REST Catalog

  2. MinIO(本地 S3 存储)

  3. mc,这是 MinIO 的命令行工具,用于自动创建数据桶。

minio01.excalidraw

当向 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 进行验证。

```html
❯ ./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 🔗

💾 示例 Docker Compose

测试版本:3.0.0

```

配置难度:👍👍

上手非常简单,看起来是个不错的轻量级选择。

不过我注意到一点:S3Proxy 依赖的项目之一 jclouds 已于 2025 年年中移入 Apache Attic(即已退役)——当然,如果你只用本地存储,这大概也无伤大雅?

RustFS 🔗

💾 Docker Compose 示例

测试版本:1.0.0-alpha.79

配置难度:✅✅

需要注意的是,RustFS 最近被爆出一个相当严重的安全漏洞,让一些人对它望而却步。 官网看起来挺像样,但好几个链接都指向同一个页面,透着一股新项目"刚刷完漆"的味道 :) 如果后续切换起来方便的话,对 demo 场景来说问题不大。 另外该项目目前还处于 'alpha' 阶段。
rustfs.excalidraw

RustFS 还自带图形界面:

rustfs gui

SeaweedFS 🔗

💾 Docker Compose 示例

测试版本:4.06

配置难度:👍(很简单)

seaweedfs.excalidraw

这份快速入门指南对于让 S3 基础功能跑起来很有帮助。(话虽如此,我最终还是让 Claude 帮我实现了……)。总体而言,这里需要改动的东西不多;基本就是直接替换 Docker 镜像,相当直白。不过鉴权需要单独的配置文件(和 Garage 一样,我把它内联写在了 Docker Compose 里)。

编辑:博客刚发出来,该项目团队就回复说他们会移除这个额外要求,让它更容易使用!太酷了 :)

这已在 https://t.co/RQv387bbKb 中完成,并将包含在每周版本中。

— SeaweedFS (@SeaweedFS) 2026年1月14日

SeaweedFS 自带一个基础 UI,用起来很方便:

seaweedfs ui

SeaweedFS 官网看起来有点冷清,乍一看你很容易误以为它不是开源项目,因为页面上有“定价”选项,首页标题也是“SeaweedFS Enterprise”(我甚至没找到 GitHub 链接!)。 但它确实是个久经沙场的 OSS 项目:SeaweedFS 从 2018 年的 0.91 版本起就支持 S3 了。 你可以通过这些 幻灯片进一步了解 SeaweedFS,其中包括一张 与 MinIO 的对比图表

Zenko CloudServer 🔗

💾 Docker Compose 示例

测试版本:9.2.8

配置难度:👍 简单

cloudserver.excalidraw

CloudServer 曾用名 S3 Server,是 Scality 公司发布的工具集 Zenko 的一部分。它可以很容易地替代 MinIO,但起初我有点难以理清这些名称(cloudserver/zenko/scality)以及实际需要运行的是哪个软件。此外,文档中还链接了一个过时的 Docker 镜像,体验稍显怪异。

Garage

💾 Docker Compose 示例

配置难度:😵 复杂

测试版本:1.0.0

这一步我找朋友帮忙才搞定。除了 garage 容器本身,还需要另一个容器进行初始配置,以及一个 TOML 配置文件。为了简洁,我把配置内容直接内联写进了 Docker Compose 文件中。

garage.excalidraw

如果我坐下来仔细读文档(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 🔗

💾 Docker Compose 示例

测试版本:2.1.0

Ozone 最初在 2015 年作为 HDFS 项目的一部分创建,2020 年从 Apache Hadoop(还记得它吗?)独立了出来。

配置难度:😵

apacheozone.excalidraw

它确实能替代 MinIO,但绝对算不上轻量级方案;无论是我还是 Claude,都没法找到少于四个节点的部署方式。 它浑身散发着浓重的 Hadoop 味道,就我这个使用场景来说,我是不会急着采用它的。

Ceph Object Gateway 🔗

看了一眼安装说明,我直接劝退了!

Ozone 和上面提到的方案都偏重型。我确信它们在各自擅长的领域都很出色,但都不适合作为轻量级容器直接嵌入我的 Docker Compose 本地演示环境。

对比 🔗

大家都喜欢看横向评测图表,对吧?

名称 配置便捷性 许可证 商业支持与治理模式 Docker 拉取量1 GitHub Star 数 首次提交时间 主要贡献者

gaul/s3proxy

Git 仓库

👍👍

Apache 2.0

单贡献者(Andrew Gaul

500万+

2.1k

2014 年

1

RustFS

Git 仓库

👍👍

Apache 2.0

官网精美,但公司细节披露较少

10万+

19.7k

2024 年

约 4 人

SeaweedFS

Git 仓库

👍

Apache 2.0

单贡献者(Chris Lu),提供企业版选项

500万+

29.5k

2012 年

1

Zenko CloudServerGit 仓库

👍

Apache 2.0

Scality(商业公司)

5M+(旧版本)

1.9k

2015

~10

Garage

Git 仓库

😬

AGPL

NGI/NLnet 资助

1M+

2.5k

2020

~4

Apache Ozone

Git 仓库

lol

Apache 2.0

Apache 软件基金会

1M+

1.1k

2018

30+

1 Docker 拉取量是一个有用的参考指标,但并非绝对指标。因为少量下游项目若经常通过 CI/CD 流水线使用该镜像,很容易扭曲这一数据。

总结 🔗

写这篇博客其实有点跑题,起因是我想更新一个演示,而目前该演示使用的是 MinIO。 那么,试用之后,我最终会选择哪些方案呢?

  • SeaweedFS - 是。

  • S3Proxy - 是。

  • RustFS - 也许吧,但项目很新且仅为 alpha 版本。

  • CloudServer - 是,可能吧?说实话,它作为整套套件的一部分让人有些望而却步,我担心得理解其他组件才能使用它——不过这种顾虑多半是多虑了。

  • Garage - 否,配置对我来说太复杂。

  • Apache Ozone - 哈哈,否。

我对那些没给 yes 的方案并无贬低之意;它们很可能都是优秀的工程,只是没有聚焦于我的核心场景(简单、易于配置的单机本地 S3)。

在选择 MinIO 的替代品时,还有几点需要留意:

  • 治理。这些项目虽然都是开源的,但只有 Ozone 归基金会(ASF)所有。其他项目理论上都可能随时改许可证(MinIO 就是这么干的)。

  • 社区健康度。"巴士系数"如何?上面有几个项目历史悠久、运转良好,但核心维护者只有一个人。如果他哪天弃坑了,社区里会有人 fork 出来继续积极维护吗?

补充 🔗


原始来源: Hacker News

评论 (0)