文章
努力加载图片中...
MinIO-Windows系统下Docker高版本与本机低版本的安装、数据迁移记录
  • 2205 字

  • 3 分钟

  • 3 次

  • 2025-12-28
标签:

1 前言

最近遇到一个问题,原本的服务器(不是我的)是使用 Docker 部署的 MinIO,而现在我需要将 MinIO 迁移到一个 Windows Server 系统中。

但由于这个垃圾 Windows Server 系统居然没有 Docker (能不能装不是我能决定的)。所以只能将 MinIO 直接装在 Windows 系统中。

现在有个尴尬的问题,MinIO 的 5 月 24 日以后的版本,阉割了大部分 Web 的功能,服务功能不知道有没有被阉割。我的 Docker 中使用的是 4 月 22 日版本的 MinIO,所以我打算找相同版本号的 Windows 版本的 MinIO。但很可惜,找不到。

Windows 安装 MinIO 需要 minio.exe 文件,但是这个文件的历史版本不知道在哪下载,官网只有最新的版本。

无奈之下,只能找个更低的版本,安装和版本资源详见: 在Windows上MinIO的安装与使用(保姆教程)-CSDN博客

于是,现在就要解决一个问题,怎么将 Docker 中,也就是 Linux 版本的 MinIO 数据,迁移到 Windows 且是更低版本的 MinIO 中。

2 前置准备-安装 MinIO

因为我是解决完了才写记录的,为了保证方法的可行性,我就在我的电脑(Windows 11),使用 Docker 开一个 MinIO,然后本机再安装一个 MinIO 来重新做一次。

2.1 Windows Docker 版

首先是 Docker 版本的,复制之前的 docker-compose 文件,稍作修改,配置如下:

yml
version: '3.8' services: dm-minio: image: minio/minio:RELEASE.2025-04-22T22-12-26Z container_name: ${MINIO_SERVICE_NAME} ports: - "9002:9000" - "9003:9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} MINIO_BUCKET_NAME: ${MINIO_BUCKET_NAME} TZ: Asia/Shanghai volumes: - ${MINIO_DATA_PATH}:/data - ${MINIO_INIT_PATH}:/init-scripts entrypoint: > /bin/sh -c " chmod +x /init-scripts/init-minio.sh && /bin/sh /init-scripts/init-minio.sh & /usr/bin/minio server --console-address :9001 --address :9000 /data " restart: always healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ] interval: 30s timeout: 20s retries: 5 networks: - dm-network networks: dm-network: driver: bridge

注意哦,我为了不让两个 MinIO 的端口相互占用,所以修改了这里的端口映射 9000 -> 90029001 -> 9003

环境变量,和 docker-compose.yml 文件同级

txt
# Minio MINIO_SERVICE_NAME=dm-minio MINIO_ENDPOINT=http://${MINIO_SERVICE_NAME}:9000 MINIO_ROOT_USER=dm_root MINIO_ROOT_PASSWORD=dm123456 MINIO_BUCKET_NAME=dm-bucket MINIO_DATA_PATH=./minio/data MINIO_INIT_PATH=./minio/init

初始化脚本放在和 docker-compose.yml 文件同级的 minio/init 目录下,脚本命名为 init-minio.sh

shell
#!/bin/bash # MinIO 初始化脚本 echo "等待 MinIO 服务启动..." sleep 15 echo "设置 MinIO 客户端别名..." /usr/bin/mc alias set minio http://localhost:9000 "$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD" # 检查 bucket 是否存在 if /usr/bin/mc ls "minio/$MINIO_BUCKET_NAME" >/dev/null 2>&1; then echo "Bucket $MINIO_BUCKET_NAME 已存在,确保设置为公共访问权限" else echo "创建 bucket: $MINIO_BUCKET_NAME" /usr/bin/mc mb "minio/$MINIO_BUCKET_NAME" sleep 5 fi # 设置 bucket 为 public 权限 echo "设置 bucket $MINIO_BUCKET_NAME 为公共读取权限" /usr/bin/mc anonymous set public "minio/$MINIO_BUCKET_NAME" echo "验证 bucket 策略设置..." /usr/bin/mc policy list "minio/$MINIO_BUCKET_NAME" echo "MinIO 初始化完成"

完成了,启动 Docker Desktop ,然后在 docker-compose.yml 目录,打开 cmd,输入 docker-compose up

Pasted image 20251209124203.png

打开浏览器,输入 http://localhost:9003,登录后,查看桶是不是创建了,权限有没有设置好。

Pasted image 20251209140726.png

Docker 版就安装完成了,然后在桶中上传几个文件,作为测试。

Pasted image 20251209140741.png

2.2 Windows 版

然后是 Windows 版本的,首先创建一个 minio 目录,随意命名。然后在该目录下创建 bin、logs、data 三个子目录。

将下载的 minio.exe 和 mc.exe 放在 bin 目录下。

然后在 bin 目录下,打开 cmd,依次执行下面三个命令来启动 MinIO 服务。

shell
set MINIO_ROOT_USER=root set MINIO_ROOT_PASSWORD=root123456 .\minio.exe server D:\code\minio\data --console-address "127.0.0.1:9001" --address "127.0.0.1:9000"

Pasted image 20251209145338.png

打开浏览器,输入 http://localhost:9001,登录后,新建一个桶,用于数据迁移,这里随意命名就行,我这里就设置为和 Docker 那个一样的名字。

Pasted image 20251209140555.png

前置准备就完成了。

3 数据迁移

参考文章:

  1. Windows环境Minio的数据迁移、备份和恢复_minio windows文件同步-CSDN博客
  2. 使用Minio Clinet将老版本Minio的数据迁移到新版本的Minio - 贾光辉 - 博客园

MinIO 本身提供了一个功能齐全的 Windows 客户端 mc.exe,其中就有进行数据迁移的操作。 MinIO客户端 — MinIO中文文档 | MinIO Linux中文文档

进行数据迁移的操作主要有两个 mc cpmc mirror。具体的区别,可以看看下面几篇文章:

  1. mc命令 cp 和 mirror 区别 - 下一朵云
  2. "mc cp -递归“和"mc镜像-覆盖”有什么不同?-腾讯云开发者社区-腾讯云
  3. mc cp — MinIO中文文档 | MinIO Linux中文文档
  4. mc mirror — MinIO中文文档 | MinIO Linux中文文档

简单来说,cp 就是复制粘贴,将文件或者对象从一个地方复制到另一个地方,这点和 linux 的 cp 差不多;mirror 则类似数据同步,它会比较两个目录之间的不同。如果 A 有某个文件,而 B 没有,mirror 就会将该文件复制到 B 中;如果 A 没有某个文件,而 B 有,mirror 就会将该文件从 B 删除。

对于我们这个数据迁移来说,二者是没有区别的,因为我们这的 A(Docker 的 MinIO) 是有数据,而 B (Windows 的 MinIO)是空的,所以不论是 mc cp 还是 mc mirror ,其结果都是将 A 的数据复制到 B 中。

下面我会用两种命令分别演示一下数据迁移操作。

3.1 使用 mc cp 操作来进行数据迁移

在 Windows 版的 MinIO 的 bin 目录下,打开 cmd。

为了方便操作,我们给两个 MinIO 服务都设置一下别名。依次输入以下的命令

shell
mc alias set minio_docker http://localhost:9002 pmmis_root pmmis123456 mc alias set minio_windows http://localhost:9000 root root123456

Pasted image 20251209141227.png

我这里不知道是环境变量还是啥忘改了,不知道为什么登录用的是原来的账号密码,Web 端我也是用 pmmis 这个密码才能登录,不过不要紧了,账号密码啥的不影响。

输入命令执行数据迁移

shell
mc cp --recursive minio_docker/dm-bucket/ minio_windows/dm-bucket/

--recursive 是递归复制,不然只会复制顶层路径下的文件,后面的参数是源路径和目标路径

Pasted image 20251209141653.png

进入 Web 端看看是否迁移成功

Pasted image 20251209141748.png

迁移成功。

3.2 使用 mc mirror 操作来进行数据迁移

不需要清空数据卷,在 Windows 版的 MinIO 中创建一个新的桶 dm-bucket2

Pasted image 20251209142525.png

执行命令

shell
mc mirror minio_docker/dm-bucket minio_windows/dm-bucket2

注意了,路径末尾不要有 / ,不然执行时会出现没有文件被迁移的问题。

Pasted image 20251209143739.png

进入 Web 端看看是否迁移成功

Pasted image 20251209143801.png

迁移成功。

此外,mc mirror 还支持多种迁移策略例如 --watch--overwrite--remove,详情可以去官网看,我这里不再演示。 mc mirror — MinIO中文文档 | MinIO Linux中文文档


就迁移的操作来说,这种迁移方式应该也适用与低版本迁移到高版本,因为 mc.exe 只需要知道 MinIO 服务的地址就行,不要求其他。不过这只是我的猜测,具体可以自己试试。

但是,就 mc.exe 官网的说明来看,这种迁移方式支持任何 S3 协议的对象存储,甚至可以跨端迁移,就是从 MinIO 迁移到另一个支持 S3 协议的对象存储服务上。

不得不说,这个工具确实相当强大。

4 总结

  1. 复习了在 Windows 中,使用 Docker 安装 MinIO 和直接按照 MinIO 的流程。
  2. 了解了 MinIO 客户端 mc.exe 的功能和作用。
  3. 学会了使用 mc.exe 进行不同 MinIO 服务的数据迁移。
  4. 了解了 mc.exe 中进行数据迁移的两种命令和使用方法。
作者: Xigrut发布时间: 2025-12-28 23:52:57上次编辑时间: 2026-06-18 19:22:37 许可协议: CC BY-NC-SA 4.0
留言区