公有云厂商提供的OSS好用是好用,但价格略贵,而且一不留神就别人薅了羊毛,流量清零。另外把一些敏感或者私人数据放上去可能也不放心,那就自己搭建一个专属OSS吧!
MinIO是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。麻雀虽小,五脏俱全,该有的功能应有尽有。
话不多说,这就开始!
1、拉取镜像
docker run --name minio bitnami/minio:latest
这里使用 Bitnami 提供的镜像省事,优点可以参考他们的说法:![]()
传送门
注意!这里有个大坑,bitnami/minio 最新版对系统内核有要求,需要4.0.0及以上,若达不到要求则启动失败!
而我的服务器是3.10.0的,被这个卡了一天,容器无限重启,死活找不到原因,最后偶然看到大佬的一个issue,添加了BITNAMI_DEBUG=true环境变量,才终于找到原因所在,后来替换版本为2022.12.12 才终于搞定。
因此若有类似情况的朋友可以尝试降低版本。
$ cat /proc/version
Linux version 3.10.0-1160.99.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Sep 13 14:19:20 UTC 2023
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
bitnami/minio 2022.12.12 5be24c0d82cd 12 months ago 229MB
2、创建docker-compose.yml
创建docker-compose.yml,填写以下内容:
version: '2'
# networks可要可不要,若是需要容器间通信可配置此项
networks:
app-tier:
driver: bridge
services:
server:
container_name: minio
image: bitnami/minio:2022.12.12
environment:
# 以下两项即访问页面的用户名与密码,切记长度不能少于8
- MINIO_ROOT_USER=aaaa1234
- MINIO_ROOT_PASSWORD=bbbb1234
# 开启调试信息
- BITNAMI_DEBUG=true
volumes:
- 'minio_data:/bitnami/minio/data'
ports:
- "9000:9000"
- "9001:9001"
restart: always
networks:
- app-tier
volumes:
minio_data:
driver: local
3、启动
在docker-compose.yml 文件所在目录下执行命令:
docker-compose up -d
待启动完成后访问9001端口即可。
4、问题排查
补充一点问题的排查思路,一开始我在部署的时候,发现明明容器已经启动了,但就是访问不了页面,查看日志发现大量重复日志:
$ docker logs minio
....
Adding local Minio host to 'mc' configuration...
...
Failed to add temporary MinIO server
minio 16:16:58.15 INFO ==> MinIO is already stopped...
如果容器设置了参数restart=always,会发现容器貌似启动,但无法正常访问。
没设置的话则容器会自动停止。经过网上查询及我自己实验,可能的原因有以下两种:
1、密码长度太短,MinIO要求密码长度不能少于8,可以检查MINIO_ROOT_USER、MINIO_ROOT_PASSWORD这两项,看看长度是否符合要求。
2、系统内核版本太低,最新版MinIO要求4.0.0及以上,否则也会启动失败。
如果以上两种方案都不能解决问题,那就给容器添加BITNAMI_DEBUG=true环境变量,它会打印更加详细的错误信息,再根据错误信息自行排查。
另外,若容器启动成功,也正常运行,但页面无法访问,不妨看一下防火墙、安全组,ACL这些是否放通过了对应端口。