全网最全的minio问题常见报错及解决 | 您所在的位置:网站首页 › 关于fPaaS › 全网最全的minio问题常见报错及解决 |
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 前言 在线音乐戳我呀! 音乐博客源码上线啦! 最近在整理自己的在线音乐(因为最近换服务器了),发现上传的图片文件很杂乱,如:音乐上传到minio中(文件服务器),IT知识模块的图片上传在Node指定的文件夹中,其他模块的文件又是Node的另外一个文件夹。 就想着能不能全部都由一个来管理这些文件,优先想到之前实习的时候公司(dpf)搭建个文件服务器,也用了一下确实是挺方便的,也就是今天的主角 -- Minio。 其实自己的在线音乐已经用了很久了,只不过没有说对全部文件都归其管理,再加上现在应用部署在Docker上,不知道为什么Node文件映射失败,但Minio却映射得出来,这也是一开始初心想文件都放在minio中。 上一篇有请Minio统一管理文件文章有实操代码,但好像少了点什么? oh ~ 原来是少了点常用报错处理总结,这不,后续来了。刚好换服务器的时候还真遇到一个棘手的问题。 Are you ready ?假期再次快乐。 先来张图效果。 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 遇到错不要慌,先找下有用过的人。 好,我都懂的。一个人也很好的。 于是我百度了一遍,其中有一篇给了我灵感。 他的意思是说:在win开发的脚本,需要转换一下格式。 因为我的那串长长的docker run minio ...命令是从dos文档上复制过来的,直接拷到linux上可能有编码上的问题,于是我怀着猜测的心态去手敲了一遍,竟然,竟然就真的运行成功了! 可恶,这对于懒人cv真是个小坑。 二、寻找回忆中的Miniominio成功在docker上运行起来了,正当我要访问的时候,访问失败。 2.1 发现问题怎么会访问不了呢?端口映射了,防火墙也关了,访问不了也算了,还有一个奇怪的现状是我明明输入的是9000端口,可它却自动给我跳到41757这个陌生的端口上。 感觉他访问我9000不通,于是就自动跳到41757端口上。 2.2 尝试找到问题所在连忙查下日志。 ❓ 会不会是新版本不一样了? 2.3 有点小思路因为之前拉取的minio已经是半年前了,查了更新记录也确实是有更新版本。 查询minio服务版本:docker search minio 新版本升级太快了,于是找到旧版本,建议大家选择minio/minio:RELEASE.2021-06-17T00-10-46Z这个版本,因为其他版本坑也挺多的。 通过以上的坑,我们发现minio的版本更新迭代特别快,最新版本的已经变得面目全非,不认识了。我查阅了最新官网发布版本。 大大小小已经发布了200多个版本了。 我们选择的2021年6月17号。 2.4 实战一下可能找到问题所在,那就来试一下。 2.4.1 拉取minio镜像 docker pull minio/minio:RELEASE.2021-06-17T00-10-46ZT喵的,跑起来了! 果然是版本的问题,版本升级太快了,还好找到了旧版本。 三、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’ 当您使用不是 minio 命令的参数运行 minio 命令时,这会显示。 不是说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天)。 from disk cache,还好有缓存资源,不会导致音乐模块的图片在minio服务有问题时加载不出来。 还有一个现象是:minio管理界面登录不进去(报错的时候),但访问资源还是可以访问的,说明服务并没有挂。 四、putObject图片后,图片加载不了💔 4.1 发现问题着重讲一个JavaScript中的putObject方法,正当我用koa2使用着minio的这个方法上传文件,发现文件上传完后,前端获取链接竟然无法正常显示。 4.2 核对官方例子先贴下minio的方法说明。 在看一下实际代码中如何调用。 直接拿官方例子代码使用。 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显示。 发现却显示不了? 检查了一下,原来是链接没写端口号,粗心了啊。 加上之后,还是显示不了? 4.3 JavaScript上传图片和其他图片图标不一样打开minio管理界面确认是不是加上去了。 ❓ 怎么我上传的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这个参数下手了,可能就是文件类型。 然而不知道元数据是什么,官网也没有说,怎么传,有点小坑。 🙋寻找解决问题之路。 4.5 少传ContentType参数?有一个人跟我一样,也是发现这个问题,说进该方法类仔细看了一下,好家伙居然方法偷偷改过了但是官网还没改,于是他说多传ContentType参数就可以了。 于是我也去看了下putObject源码: 并没有看到我想看到的ContentType参数。 4.6 改下源码?好家伙,有人说直接改源码,确实是一个办法,不过这是被逼无奈才选择的下策,再找找吧。 4.7 官方例子说了 == 白说?minio官方github也发现了这个问题,说多传content-type就可以解决,我也知道多传,那到底怎么传呢? 没说。 反正没有设置文件类型,把url放在浏览器,就会直接下载,如果类型正确,是可以预览的,不会一来就给你下载。 直到我看到这篇。说什么不重要,重要的是metaData有人使用了。 我的代码改造如下: 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)有问题,不能大写。 大家记得看官网介绍呀! 不经历风雨,怎么见彩虹。 重构了,总会有所收获,有所成长,在线音乐希望越来越好,会不断更新,直到干不动了。 记得实习公司的时候,同一个学校的师兄跟我说:代码不建议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 实验室设备网 版权所有 |