全网最全的minio问题常见报错及解决 您所在的位置:网站首页 关于fPaaS 全网最全的minio问题常见报错及解决

全网最全的minio问题常见报错及解决

2023-10-29 21:09| 来源: 网络整理| 查看: 265

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言 在线音乐戳我呀! 音乐博客源码上线啦! 最近在整理自己的在线音乐(因为最近换服务器了),发现上传的图片文件很杂乱,如:音乐上传到minio中(文件服务器),IT知识模块的图片上传在Node指定的文件夹中,其他模块的文件又是Node的另外一个文件夹。 就想着能不能全部都由一个来管理这些文件,优先想到之前实习的时候公司(dpf)搭建个文件服务器,也用了一下确实是挺方便的,也就是今天的主角 -- Minio。 其实自己的在线音乐已经用了很久了,只不过没有说对全部文件都归其管理,再加上现在应用部署在Docker上,不知道为什么Node文件映射失败,但Minio却映射得出来,这也是一开始初心想文件都放在minio中。 上一篇有请Minio统一管理文件文章有实操代码,但好像少了点什么? oh ~ 原来是少了点常用报错处理总结,这不,后续来了。刚好换服务器的时候还真遇到一个棘手的问题。 Are you ready ?

假期再次快乐。

先来张图效果。

fbd57b4cd563eedf704d7ae9570938d.png

Minio界面直观、可视化界面、方便管理、上传下载流程简单,还能设置权限、失效时间等等。

使用三年,遇到的坑

从win拷过来linux使用命令是不可以的(总是cvcv,果然出事了?)

新版本有问题,建议使用minio/minio:RELEASE.2021-06-17T00-10-46Z(寻找回忆中的Minio)

MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用?

putObject上传后得到的url在浏览器里打开是下载文件,而不是直接显示图片(putObject图片后,图片加载不了💔)

一、cv出问题了?

minio一开始是部署到47上的window,后面47服务器换成docker环境,minio也换成了docker运行,再后来被我迁移到39的docker上。(因为服务器到期)

过程也是坎坷,但也正因为这些“风雨”,才能见到“彩虹”。

在47服务器上的docker环境已经是半年前的事情了,当时一顿操作如下:

// 拉取minio镜像 docker pull minio/minio // 跑起 docker run -p 9000:9000 --name minio -d -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=123456" -v /home/minio:/data -v /home/minio/config:/root/.minio minio/minio  server /data

这些参数在上一篇有请Minio统一管理文件文章有讲到哦~

然后就可以正常运行起来了。

前几天从47 -> 39服务器,我也跟47一样的操作,直接拉闸。

报了:No such file or directory

遇到错不要慌,先找下有用过的人。

cd7244b4e63aea1bc84e5bcb707bf3b.png

好,我都懂的。一个人也很好的。

于是我百度了一遍,其中有一篇给了我灵感。

2.png

他的意思是说:在win开发的脚本,需要转换一下格式。

因为我的那串长长的docker run minio ...命令是从dos文档上复制过来的,直接拷到linux上可能有编码上的问题,于是我怀着猜测的心态去手敲了一遍,竟然,竟然就真的运行成功了!

996021dbbf8cc69cf61522bd14e1fda.png

可恶,这对于懒人cv真是个小坑。

二、寻找回忆中的Minio

minio成功在docker上运行起来了,正当我要访问的时候,访问失败。

2.1 发现问题

怎么会访问不了呢?端口映射了,防火墙也关了,访问不了也算了,还有一个奇怪的现状是我明明输入的是9000端口,可它却自动给我跳到41757这个陌生的端口上。

8dde74cb0a2f84977425ac1c20e0eb1.png

感觉他访问我9000不通,于是就自动跳到41757端口上。

2.2 尝试找到问题所在

连忙查下日志。

466da452de526c191b5f327842f4c22.png

❓ 会不会是新版本不一样了?

2.3 有点小思路

因为之前拉取的minio已经是半年前了,查了更新记录也确实是有更新版本。

查询minio服务版本:docker search minio

6fdc06bb41fe4d83bba3f1f00b73d591~tplv-k3u1fbpfcp-watermark.awebp.jpg

新版本升级太快了,于是找到旧版本,建议大家选择minio/minio:RELEASE.2021-06-17T00-10-46Z这个版本,因为其他版本坑也挺多的。

通过以上的坑,我们发现minio的版本更新迭代特别快,最新版本的已经变得面目全非,不认识了。我查阅了最新官网发布版本。

8cfbbc6236484a339bf7ceb0340e1580~tplv-k3u1fbpfcp-watermark.awebp.jpg

大大小小已经发布了200多个版本了。

我们选择的2021年6月17号。

2.4 实战一下

可能找到问题所在,那就来试一下。

2.4.1 拉取minio镜像 docker pull minio/minio:RELEASE.2021-06-17T00-10-46Z

034e6ddea3c84a878ae470e17c5707f3~tplv-k3u1fbpfcp-watermark.awebp.jpg

2.4.2 启动 docker run -p 9000:9000 minio/minio:RELEASE.2021-06-17T00-10-46Z server /data // 或者自定义账号密码 docker run -p 9000:9000 --name minio -d -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=123456" -v /home/minio:/data -v /home/minio/config:/root/.minio minio/minio:RELEASE.2021-06-17T00-10-46Z  server /data

42543016e10fd8afb56011ac35d5927.png

T喵的,跑起来了!

3.png

果然是版本的问题,版本升级太快了,还好找到了旧版本。

三、MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用?

今天悠哉悠哉,就想起登录一下minio看看我的音乐文件在里面怎么样。

结果登录的时候提示:Authentication failed, check your access credentials

于是赶紧查下日志看看有没有什么有用的报错信息。

警告:MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用。 请使用MINIO_ROOT_USER和MINIO_ROOT_PASSWORD

说run的时候MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用了, 要使用新的MINIO_ROOT_USER和MINIO_ROOT_PASSWORD去设置账号密码。

于是我停止了我的minio服务,打算换个run命令。

新的命令:

docker run -p 9000:9000 --name minio -d -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=123456" -v /home/minio:/data -v /home/minio/config:/root/.minio minio/minio:RELEASE.2021-06-17T00-10-46Z  server /data

可当我使用新的命令跑的时候,报了另外一个错误。

‘ server’ is not a minio sub-command. See ‘minio --help’

41de059d693048313358b9ded813444.png

当您使用不是 minio 命令的参数运行 minio 命令时,这会显示。

1d1148f017856f488b4f4dafcbfd821b.jpeg

不是说MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用了, 要使用新的MINIO_ROOT_USER和MINIO_ROOT_PASSWORD去设置账号密码吗?

怎么就不是新的minio命令参数了。

查了之后也找不到其他解决方法,就想着之前2.4.2 启动也是简单启动一下minio服务。

docker run -p 9000:9000 minio/minio:RELEASE.2021-06-17T00-10-46Z server /data

然后启动成功了,于是我重新跑一下之前的命令。

docker run -p 9000:9000 --name minio -d -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=123456" -v /home/minio:/data -v /home/minio/config:/root/.minio minio/minio:RELEASE.2021-06-17T00-10-46Z  server /data

跑起来了,minio管理页面也可以登录上去了,说好的MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用呢?

莫名其妙报错了,还好我的nginx设置了资源缓存,浏览器就可以缓存资源(30天)。

4.png

from disk cache,还好有缓存资源,不会导致音乐模块的图片在minio服务有问题时加载不出来。

还有一个现象是:minio管理界面登录不进去(报错的时候),但访问资源还是可以访问的,说明服务并没有挂。

四、putObject图片后,图片加载不了💔 4.1 发现问题

着重讲一个JavaScript中的putObject方法,正当我用koa2使用着minio的这个方法上传文件,发现文件上传完后,前端获取链接竟然无法正常显示。

4.2 核对官方例子

先贴下minio的方法说明。

fd7c5f919860f961eccb37e3c5b031c.png

在看一下实际代码中如何调用。

直接拿官方例子代码使用。

var Fs = require('fs') var file = '/tmp/40mbfile' var fileStream = Fs.createReadStream(file) var fileStat = Fs.stat(file, function(err, stats) { if (err) { return console.log(err) } minioClient.putObject('mybucket', '40mbfile', fileStream, stats.size, function(err, objInfo) { if(err) { return console.log(err) // err should be null } console.log("Success", objInfo) }) })

图片上传成功,官网例子果然没有让我失望,于是我顺理成章返回给前端图片的URL显示。

发现却显示不了?

ca679607280d06c3c9693b0e10e3dba0.jpg

检查了一下,原来是链接没写端口号,粗心了啊。

加上之后,还是显示不了?

4.3 JavaScript上传图片和其他图片图标不一样

打开minio管理界面确认是不是加上去了。

69820822d23134b1817cf0d6d8bcbc1.png

❓ 怎么我上传的875.jpg和别的图片不一样?

🙋其他不是灰色的图片是我手动点击加号手动上传上去。

4.4 抄一下java如何写的(之前有写过,确定成功过)

自己通过koa2上传则是灰色的,灵机一动,之前java写过上传音乐模块的putObject方法代码,去看看java是怎么写的。

java代码如下:

MinioUtils.putObject( singerSong.getBucketName(), objectName, file.getInputStream(), file.getSize(), file.getContentType() );

而上面的JavaScript如下:

minioClient.putObject( 'mybucket', '40mbfile', fileStream, stats.size )

对比了一下,JavaScript没有传文件的类型,而java有传,怪不得minio管理界面没有显示文件的类型,原来是我没写。

难道是我写漏了?官网再走一波。

T瞄的,我的代码就是从官网例子复制过来的。例子并没有传文件类型。

只能从官网上的metaData这个参数下手了,可能就是文件类型。

7b6e769e0c0bf74c1887ee3eb64659e.png

然而不知道元数据是什么,官网也没有说,怎么传,有点小坑。

🙋寻找解决问题之路。

4.5 少传ContentType参数?

有一个人跟我一样,也是发现这个问题,说进该方法类仔细看了一下,好家伙居然方法偷偷改过了但是官网还没改,于是他说多传ContentType参数就可以了。

e89ec6f05611349a8dfa7f462bc2545.png

于是我也去看了下putObject源码:

66178a20bdb353b3c4f7a776e5c59a8.png

并没有看到我想看到的ContentType参数。

4.6 改下源码?

好家伙,有人说直接改源码,确实是一个办法,不过这是被逼无奈才选择的下策,再找找吧。

4.7 官方例子说了 == 白说?

minio官方github也发现了这个问题,说多传content-type就可以解决,我也知道多传,那到底怎么传呢?

没说。

反正没有设置文件类型,把url放在浏览器,就会直接下载,如果类型正确,是可以预览的,不会一来就给你下载。

85e46acf0a617bb1f12bbd48ac257a1.png

4.8 元数据参数得以解释

直到我看到这篇。说什么不重要,重要的是metaData有人使用了。

6aeff8905e1d0184a8393436004fcb4.png

我的代码改造如下:

var Fs = require('fs') var file = '/tmp/40mbfile' var fileStream = Fs.createReadStream(file) var fileStat = Fs.stat(file, function(err, stats) { if (err) { return console.log(err) } minioClient.putObject( 'mybucket', '40mbfile', fileStream, stats.size, {'Content-Type': type}, // 这个type从前端上传的file对象可以获得 function(err, objInfo) { if(err) { return console.log(err) // err should be null } console.log("Success", objInfo) }) })

成功了,前端可以正常显示了,minio管理界面也正常显示图片类型图标。

五、桶名切记不可大写

创建桶的时候,发现怎么老是报错,最后竟然是名字(itKnowledge)有问题,不能大写。

1661582823710.png

大家记得看官网介绍呀!

image.png

最后

不经历风雨,怎么见彩虹。

重构了,总会有所收获,有所成长,在线音乐希望越来越好,会不断更新,直到干不动了。

记得实习公司的时候,同一个学校的师兄跟我说:代码不建议cvcv,要多手打,才会记住,在这次minio使用过程中(一、cv出问题了?),已深刻明白了,以后开发中会刻意手打。

上传到master稳定版本的时候真的是最稳定的版本吗?啊,minio。(二、寻找回忆中的Minio)

这次实战中也知道缓存的重要性,如果程序崩了,浏览器还设置了30天的缓存时间,不会马上给客户视觉上的憎恨,当然,强制刷新就当我没说😁。(三、MINIO_ACCESS_KEY和MINIO_SECRET_KEY已弃用?)

问题存在并不可怕,可怕的是你真的认真认真查过问题了吗,别一来就改源码,会不会是我们使用的方式不对呢。(四、putObject图片后,图片加载不了)

如果对您有帮助,你的点赞是我前进的润滑剂。

相关文献

Docker -minio安装使用

Docker安装Minio,填满最新版大坑

Heroku: deploying minio server with Dockerfile CMD failure

[BUG] 上传到 minio 的时候没有设置content-type #129

使用minio接口里上传的图片无法在管理界面预览,直接在管理界面上传的图片可以预览

VUE无法直接上传文件到MinIO,提示 _fs.default.stat is not a function ?

以往推荐

有请Minio统一管理文件(实操JS、JAVA)

尤大大说我的代码全部不加分号

老湿说的万物皆对象,你也信?

Vue-Cli3搭建组件库

Vue实现动态路由(和面试官吹项目亮点)

项目中你不知道的Axios骚操作(手写核心原理、兼容性)

VuePress搭建项目组件文档

koa2+vue+nginx部署

vue-typescript-admin-template后台管理系统

原文链接

juejin.cn/post/701515…



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有