Skip to content

基于Docker部署MinIO及统计桶内文件夹下文件数量

约 1974 字大约 7 分钟

DockerMinIOMC

2026-02-10

基于Docker部署MinIO

确定镜像版本

由于新版docker-minIO 有很些功能不可用,此处选择版本为docker.io/minio/minio:RELEASE.2023-01-25T00-19-54Z

准备宿主机挂载目录和配置文件

cd /Users/dftshine/Career/LocalDocker/
mkdir -p docker_volumes/minio/data
mkdir -p docker_volumes/minio/config
cd /Users/dftshine/Career/LocalDocker/docker_volumes/minio/config/
vim config.json.deprecated

填入内容

{
  "version": "29",
  "credential": {
    "accessKey": "admin",
    "secretKey": "Admin@2025",
    "api": {
      "keyRotationInterval": "24h"
    }
  },
  "region": "us-east-1",
  "browser": "on",
  "logger": {
    "console": {
      "enable": true,
      "level": "info"
    },
    "file": {
      "enable": false,
      "filename": "",
      "level": "info",
      "rotationInterval": "24h",
      "rotationMaxSize": "1GB"
    }
  },
  "notify": {
    "amqp": {},
    "elasticsearch": {},
    "kafka": {},
    "mqtt": {},
    "nats": {},
    "nsq": {},
    "postgres": {},
    "redis": {},
    "sqs": {},
    "webhook": {}
  },
  "storage": {
    "backend": "fs",
    "fs": {
      "diskCacheMaxSize": "0",
      "diskCachePath": "",
      "forceSync": false
    },
    "erasure": {
      "codingBlocks": 0,
      "dataBlocks": 0
    }
  },
  "api": {
    "cors": {
      "enabled": false,
      "allowedOrigins": [],
      "allowedMethods": [],
      "allowedHeaders": [],
      "exposedHeaders": [],
      "maxAge": 0
    },
    "trace": {
      "enable": false
    }
  },
  "console": {
    "address": ":9001"
  }
}

脚本docker-compose-minio.yml

# docker-compose版本,兼容大部分Docker Desktop版本
services:
  # MinIO服务名称,可自定义
  minio:
    # 指定用户要求的镜像地址
    image: docker.io/minio/minio:RELEASE.2023-01-25T00-19-54Z
    # 关键:强制指定架构为linux/amd64,让M系列芯片通过Rosetta 2模拟运行
    platform: linux/amd64
    # 容器名称,可自定义
    container_name: minio-amd64-on-m-series
    # 开机自启(可选,根据需求开启)
    restart: always
    # 端口映射:主机端口:容器端口
    # 9000:MinIO的API访问端口
    # 9001:MinIO的Web控制台端口(新版MinIO分离了API和控制台)
    ports:
      - "9000:9000"
      - "9001:9001"
    # 环境变量配置(核心:MinIO的访问密钥和密钥,密码至少8位)
    environment:
      - MINIO_ROOT_USER=admin  # 自定义访问账号,可修改
      - MINIO_ROOT_PASSWORD=Admin@2025  # 自定义访问密码,可修改(至少8位)
    # 卷挂载:本地目录映射到容器内目录,实现数据持久化
    volumes:
      - /Users/dftshine/Career/LocalDocker/docker_volumes/minio/data:/data  # 本地数据目录 → 容器内MinIO存储目录
      - /Users/dftshine/Career/LocalDocker/docker_volumes/minio/config:/root/.minio  # 本地配置目录 → 容器内MinIO配置目录
    # MinIO启动命令:指定存储目录,并开放控制台端口9001
    command: server /data --console-address ":9001"
    # 权限配置(避免macOS下目录权限问题)
    privileged: true

启动

docker-compose -f docker-compose-minio.yml up -d

查看界面

http://localhost:9001/. 用户名:admin 密码:Admin@2025

image-20260210105018528

使用MinIO

创建桶

image-20260210105229838

使用在线上传或者复制服务器文件夹

复制服务器文件夹方式,将服务器上桶下文件夹拷贝到挂载数据目录中

image-20260210110207509

在线查看桶

数据已经同步过来了

image-20260210110252546

创建Access Keys

image-20260210110711677

统计桶内各文件夹下文件数量

Minio管理界面默认只展示桶内文件数量,没有直接提供「统计文件夹文件数」的命令 / API。

此时需要借助MC工具进行统计。

MC简介

MC(MinIO Client)是 MinIO 官方跨平台命令行工具,兼容 S3 协议,可管理 MinIO 及其他 S3 兼容对象存储服务。它支持桶 / 对象的创建、列举、复制、删除等核心操作,还能统计文件数量、管理访问别名、同步数据。轻量易用,适配 Windows/macOS/Linux,新版简化命令体系(如host替换为alias),是 MinIO 存储管理的高效工具,无需编程即可完成日常运维操作。

安装MC

执行官方安装脚本

打开 macOS 的「终端」(Terminal),直接运行以下命令:

curl https://dl.min.io/client/mc/release/darwin-arm64/mc \
  --create-dirs \
  -o $HOME/minio-binaries/mc

说明:darwin-arm64 正是针对 macOS M 系列(ARM64 架构)的版本,脚本会将 mc 下载到 $HOME/minio-binaries/ 目录下。

添加 mc 到系统环境变量(使其全局可用)

首先给 mc 赋予执行权限:

chmod +x $HOME/minio-binaries/mc

mc 所在目录添加到 PATH 环境变量(永久生效,适配 zsh 和 bash):

open -e ~/.zshrc

在打开的配置文件末尾,添加一行内容:

export PATH=$PATH:$HOME/minio-binaries

保存并关闭文件,然后让环境变量立即生效:

source ~/.zshrc

验证安装是否成功

在终端中直接运行以下命令,若能输出 mc 的版本信息,说明安装并配置成功:

mc --version

image-20260210111655450

使用MC(ls)进行统计

注册服务

/Users/dftshine/minio-binaries/mc alias set local_myminio http://localhost:9000 ApILszok3zBHTkUz FTFjMOWZURUpdVyTc6Qy8ustJvcFI5tR

统计

/Users/dftshine/minio-binaries/mc ls -r local_myminio/energy-industry/20251226/ | wc -l

image-20260210110911515

基于MC编写脚本实现统计桶内各文件夹下文件数量

注:也可以使用后续的tree命令直接统计。

编写脚本文件

minio_count_files_local.sh

需要配置mc工具的完整路径注册的MinIO服务名称桶的名称

#!/bin/bash

# 配置你的参数(只需要修改这 3 行!)
MC_PATH="/Users/dftshine/minio-binaries/mc"  # mc 工具的完整路径
MINIO_ALIAS="local_myminio"  # 你配置的 MinIO 别名
BUCKET_NAME="energy-industry"  # 你的桶名(已填充你当前的桶名)

# 检查 mc 工具是否存在
if [ ! -f "$MC_PATH" ]; then
    echo "错误:mc 工具路径不存在,请检查 MC_PATH 配置"
    exit 1
fi

# 遍历桶下所有一级文件夹并统计文件数
echo "开始统计桶 ${BUCKET_NAME} 下所有一级文件夹的文件数(递归统计)..."
echo "========================================"

# 关键修改:适配新版 mc,通过 / 结尾判断文件夹,且排除非一级目录
# 1. 列举桶下所有一级对象(非递归)
# 2. 过滤出以 / 结尾的(即文件夹)
# 3. 去重(避免重复统计)
folders=$("$MC_PATH" ls "${MINIO_ALIAS}/${BUCKET_NAME}/" | awk '{print $NF}' | grep "/$" | sort -u)

# 检查是否找到文件夹
if [ -z "$folders" ]; then
    echo "未找到任何一级文件夹,请检查桶名是否正确,或桶下是否有文件夹"
    echo "========================================"
    echo "统计完成!"
    exit 0
fi

# 逐个统计文件夹文件数
for dir in $folders; do
    # 统计该文件夹下文件数(递归,排除隐藏对象 .minio.sys)
    file_count=$("$MC_PATH" ls -r "${MINIO_ALIAS}/${BUCKET_NAME}/${dir}" | grep -v ".minio.sys" | wc -l)
    # 输出结果
    echo "文件夹:${dir} | 文件数:${file_count}"
done

echo "========================================"
echo "统计完成!"

添加脚本执行权限

chmod +x minio_count_files_local.sh

运行脚本

./minio_count_files_local.sh

image-20260210112229194

其他MC工具使用

同步/备份MinIO桶

本地文件夹 → MinIO 桶(上传同步)

mc mirror /本地/文件夹 myminio/mybucket/文件夹

MinIO 桶 → 本地(下载 / 备份)

mc mirror myminio/mybucket/文件夹 /本地/备份目录

MinIO ↔ MinIO(桶之间迁移)

mc mirror myminio/src-bucket myminio/dest-bucket

注、常用选项(必记)

  • --overwrite:强制覆盖已修改的文件
  • --remove目标删除源已删除的文件(完全镜像)
  • --dry-run:模拟运行,不真同步(先预览)
  • --exclude:排除某种文件,如 --exclude "*.log"
  • --quiet:安静模式,只报错不刷屏

示例:

注册两个minIO服务, 本地服务 local_myminio, 服务器服务 minio_192

mc mirror --overwrite --remove  minio_192/energy-industry local_myminio/energy-industry

注:同步后统计文件数量有延时,需等待一段时间自动更新。

Tree

mc tree 是 MinIO Client 中可视化展示存储结构的核心命令,作用是:以「树形目录结构」列出 MinIO 桶 / 文件夹下的所有对象(文件 + 子文件夹),比 mc ls 更直观,能清晰看到目录层级关系,适合快速梳理存储结构。

基础用法

# 展示你的 local_myminio 下 energy-industry 桶的所有层级结构

/Users/dftshine/minio-binaries/mc tree local_myminio/energy-industry

限制展示深度(避免层级过深刷屏)

# -d 2:只展示 2 层(桶 → 一级文件夹 → 二级内容,不再深入)
/Users/dftshine/minio-binaries/mc tree -d 2 myminio/energy-industry

统计桶内文件夹分别有多少文件数量

方式 1:只看一级文件夹 + 每个文件夹的文件数(递归统计,包含子文件夹)

/Users/dftshine/minio-binaries/mc ls local_myminio/energy-industry/ | grep "/$" | awk '{print $NF}' | while read dir; do file_count=$(/Users/dftshine/minio-binaries/mc ls -r local_myminio/energy-industry/"$dir" | wc -l); echo "文件夹:$dir | 文件数:$file_count"; done

方式 2:只看一级文件夹 + 仅当前文件夹文件数(非递归,不含子文件夹)

/Users/dftshine/minio-binaries/mc ls local_myminio/energy-industry/ | grep "/$" | awk '{print $NF}' | while read dir; do file_count=$(/Users/dftshine/minio-binaries/mc ls local_myminio/energy-industry/"$dir" | wc -l); echo "文件夹:$dir | 文件数:$file_count"; done