在 Windows 上用 Docker 部署 MinIO 并对接若依(RuoYi)

适用场景:Windows(含家庭版,WSL 2 后端)+ Docker Desktop,本地/内网部署 MinIO 对象存储,给若依做文件/图片存储,前端可直接通过 URL 访问图片。
全程用 Docker,不下载任何本地二进制。


一、环境准备

  1. 安装 Docker Desktop(Windows 家庭版选 WSL 2 后端,无需 Hyper-V)。
  2. 启动 Docker Desktop,任务栏鲸鱼图标为稳态(不是退出/报错)。
  3. 确认命令行可用 docker:
docker --version
docker compose version

提示:本文命令在 PowerShell 中执行。复制命令时只复制命令本身,不要带前面的 PS C:\...> 提示符,也不要把上一条命令的输出一起粘进去(否则 PowerShell 会把 PS 当成 Get-Process 而报错)。


二、用 docker-compose 部署 MinIO

在工作目录(例如 C:\Users\leven\WorkBuddy\2026-08-26-12-05-28)新建 docker-compose.yml:

services:
  minio:
    image: minio/minio:latest
    container_name: minio
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"   # S3 兼容 API
      - "9001:9001"   # Web 控制台
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: changeme123456   # 改成你自己的强密码(至少 8 位)
    volumes:
      - ./data:/data                        # 数据持久化到当前目录下的 data 文件夹
    restart: unless-stopped

启动:

docker compose up -d

预期输出:[+] up ... ✔ Container minio Started。


三、验证 MinIO 启动

docker ps                 # STATUS 应为 Up
docker logs minio --tail 20   # 应出现 API: ...:9000 / WebUI: ...:9001

浏览器打开 http://localhost:9001 ,用 MINIO_ROOT_USER / MINIO_ROOT_PASSWORD(默认 admin / changeme123456)登录。

日志里 API: http://172.x.x.x:9000 是容器内部地址,不用管;端口已映射到宿主 0.0.0.0:9000-9001,外部用 localhost 访问即可。
单盘部署会出现 WARNING: Host local has more than 0 drives...,属正常提示,意思是单机无冗余,开发测试无所谓。


四、创建 Bucket(以 ruoyi 为例)

MinIO 的桶名必须小写、DNS 兼容。

通过 minio/mc 容器去操作(它要和 minio 在同一 Docker 网络,用服务名 minio 访问):

第 1 步:获取 minio 所在网络名(compose 项目名默认取目录名,网络名形如 <项目名>_default):

docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{end}}' minio

把输出记下来,下文用 ${MINIO_NETWORK} 代替(本例为 2026-08-26-12-05-28_default)。

第 2 步:建桶

docker run --rm --entrypoint sh --network ${MINIO_NETWORK} minio/mc -c "mc alias set local http://minio:9000 admin changeme123456 && mc mb --ignore-existing local/ruoyi"

预期:Bucket created successfully \local/ruoyi``。


五、生成 Access Key(供若依上传用)

桶默认是私有的,上传(写)需要 Access Key;下载可读权限我们下一步单独开。

docker run --rm --entrypoint sh --network ${MINIO_NETWORK} minio/mc -c "mc alias set local http://minio:9000 admin changeme123456 && mc admin accesskey create local --name ruoyi-key"

输出示例:

Access Key: V0NF0QF3ZM6312MICWM7
Secret Key: xxxxxxxx你的密钥xxxxxxxx
Expiration: NONE
Name: ruoyi-key

把 Access Key / Secret Key 记好,不要提交到代码仓库、不要外泄。


六、让图片可直接通过 URL 访问(匿名读)

若依前端要直接 <img src="..."> 显示图片,需要桶对"下载"开放匿名访问(不开放列举,仅知道确切文件名可下载):

docker run --rm --entrypoint sh --network ${MINIO_NETWORK} minio/mc -c "mc alias set local http://minio:9000 admin changeme123456 && mc anonymous set download local/ruoyi"

预期:Access permission for \local/ruoyi` is set to `download``。

设置后,图片可通过 http://localhost:9000/ruoyi/<文件名> 直接在浏览器打开。

想收回公开读:mc anonymous set none local/ruoyi。
更规范但不省事的做法是不改桶权限,由后端用 SDK 生成「预签名 URL」给前端临时访问(私有、安全、可控)。


七、对接若依(RuoYi)

在若依的 application.yml(或对应配置)中填入:

minio:
  endpoint: http://localhost:9000      # 若依也跑在 Docker 内同一网络则用 http://minio:9000
  accessKey: 你的AccessKey
  secretKey: 你的SecretKey
  bucketName: ruoyi
  • Endpoint 选择:若依程序跑在 Windows 宿主上 → http://localhost:9000;若依也跑在 Docker 容器里(同网络)→ http://minio:9000。
  • 图片访问地址:因为 ruoyi 桶已公开读,前端直接拼 http://localhost:9000/ruoyi/<文件名> 即可显示,无需预签名。

不同若依版本(RuoYi-Vue 单体 / RuoYi-Cloud / 二开带 MinIO 模块)配置位置略有差异,但核心就是上面四项。若你的若依已有 MinIO 工具类,替换这四项即可。


八、常用运维命令

docker compose down                 # 停止并移除容器(数据在 data/ 不丢)
docker compose up -d --force-recreate   # 改了 compose 后重建
docker run --rm --entrypoint sh --network ${MINIO_NETWORK} minio/mc -c "mc alias set local http://minio:9000 admin changeme123456 && mc ls local"   # 列出所有桶
docker run --rm --entrypoint sh --network ${MINIO_NETWORK} minio/mc -c "mc alias set local http://minio:9000 admin changeme123456 && mc anonymous get local/ruoyi"   # 查看桶权限

九、踩坑记录(Windows + Docker Desktop)

  1. host.docker.internal 解析不到
    在 minio/mc 容器里用 host.docker.internal 连 MinIO 会报 dial tcp: lookup host.docker.internal ... no such host(它跑去公网 DNS 查了)。
    解决:让 mc 容器加入 minio 所在网络,用服务名 minio:9000 访问(见上文 --network ${MINIO_NETWORK})。

  2. minio/mc 镜像不能直接 sh -c
    minio/mc 镜像的 ENTRYPOINT 是 mc,写成 docker run minio/mc sh -c "..." 会变成 mc sh -c "..." 而报错 sh is not a recognized command。
    解决:加 --entrypoint sh,即 docker run --rm --entrypoint sh minio/mc -c "..."。

  3. PowerShell 粘贴报错
    复制命令时若把 PS C:\...> 提示符或上一条输出一起粘进去,会触发 Get-Process / CommandNotFoundException 等红字。这只是粘贴姿势问题,不是 docker 失败。只复制命令那一行即可。


十、安全建议

  • MINIO_ROOT_PASSWORD 用强密码,且不要和示例相同。
  • Access Key 的 Secret Key 视为密码,仅存放在服务端配置/环境变量,切勿提交到 git。
  • 生产环境建议:桶保持私有 + 预签名 URL;或对 ruoyi 配置更细的匿名策略(仅开放特定前缀),不要整桶裸奔。
  • 本文的 ruoyi 公开读仅适合本地/内网测试;暴露到公网前请重新评估权限。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容