Docker安装MinIO遇到的问题汇总——持续更新中

文章目录

  • Docker安装MinIO遇到的坑
    • 前言
    • 问题1:执行`docker run`报错Error response from daemon
    • 问题2:启动MinIO容器浏览器无法访问
    • 问题3:上传文件报错`InvalidResponseException`
    • 问题4:上传文件报错`Connection refused`
    • 最终的启动指令
    • 问题5:上传文件报错`Unsupported OkHttp library found. Must use okhttp >= 4.8.1`

Docker安装MinIO遇到的坑

前言

本文章记录作者使用Docker安装MinIO过程中遇到的所有问题,将持续更新,如果你在使用Docker安装MinIO过程中遇到了一些问题,但是本文没有记载,你可以直接在本文评论区贴图、或打字描述,这样大家都能看到,可以给你一些建议,从而不断完善,让后来者少走更多的弯路,作者这一路也受到很多这样的博主的无形之中的帮助,所以作者也想成为这样能够无形之中帮助他人的人,这也算是一种善吧,“勿以善小而不为,勿以恶小而为之”,这也是我一直坚持记录Bug的出发点之一,一起加油吧,初学者

PS:由于笔者也是一个初学者,所以文中可能对于一些问题原因的解释不到位,如果您知道,还请及时告知在下,同时如果对于一些问题,你有更好的解决方案,也请你能够分享给笔者,万分感谢

问题1:执行docker run报错Error response from daemon

  • 问题:执行docker run报错Error response from daemon

    docker: Error response from daemon: driver failed programming external connectivity on endpoint minio (b78ded203d04164bc5d4a2e9dae2a4cdda9f4377950d38e9d0b46d033ca4608c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9000 -j DNAT --to-destination 172.17.0.3:9000 ! -i docker0: iptables: No chain/target/match by that name.
    (exit status 1)).
    

    image-20231019155714037

  • 问题原因:没有开启防火墙。

    我执行docker run进行端口映射时,需要使用防火墙,但是由于我是关闭了防火墙的原因,所以导致无法进行映射,从而出现报错

  • 问题解决:开启防火墙,重新启动MinIO容器

    # 查看防火墙状态
    systemctl status firewalld.service 
    # 开启防火墙
    systemctl start firewalld.service 
    # 关闭防火墙
    systemctl stop firewalld.service 
    

问题2:启动MinIO容器浏览器无法访问

  • 问题:启动MinIO容器浏览器无法访问

    image-20231019160116377

  • 问题原因:存在两个问题

    • 问题1:使用了过期的配置

      自从RELEASE.2021-02-10T23-14-37Z 版本开始引入了引入了鉴权功能,并且在首次启动时需要设置根用户和密码,MinIO就不在使用 MINIO_ACCESS_KEYMINIO_SECRET_KEY 进行访问鉴权,而是直接使用MINIO_ROOT_USERMINIO_ROOT_PASSWORD

    • 问题2:没有为MinIO配置静态端口

      这个问题涉及到了Docker和MinIO的运行机制,当你使用Docker启动MinIO服务时,默认情况下,它会在一个动态的端口上监听,这个端口是由Docker守护程序选择的。这种动态监听的机制可以使得Docker容器能够更好地与其他容器进行通信,因为它们都在同一个Docker网络上。

      image-20231019160340588

  • 问题解决

    • 对于问题1:要么降低MinIO的版本,要么就将 MINIO_ACCESS_KEYMINIO_SECRET_KEY 配置项改为MINIO_ROOT_USERMINIO_ROOT_PASSWORD

    • 对于问题2:使用下面配置项使得端口静态化

      --console-address ":9000" --address ":9001"
      

问题3:上传文件报错InvalidResponseException

  • 问题:上传文件报错S3 API Request made to Console port. S3 Requests should be sent to API port.

    image-20231021202651845

    io.minio.errors.InvalidResponseException: Non-XML response from server. Response code: 403, Content-Type: text/xml; charset=utf-8, body: <?xml version="1.0" encoding="UTF-8"?>
    <Error><Code>AccessDenied</Code><Message>S3 API Request made to Console port. S3 Requests should be sent to API port.</Message><RequestId>0</RequestId>
    </Error>
    
  • 问题原有:用错了MinIO的端口号

    前面我们通过--console-address ":9000" --address ":9001"配置了MinIO的网页控制台端口号是9000,而MinIO服务的端口是9090,我在项目中使用了控制台端口号

  • 问题解决:将端口号改为MinIO的服务端口号9001

问题4:上传文件报错Connection refused

  • 问题:上传文件报错Connection refused

    image-20231021204633332

  • 问题原因:没有配置MinIO端口映射。

    之前我只配置了MinIO控制台的端口映射,但是没有为MinIO服务配置端口映射,导致Docker容器中的端口没有对虚拟机开放,从而导致连接不上,这一点坑了我好久┭┮﹏┭┮(如果这一点大家也踩坑了,就给我点个赞吧,安慰一下我)

  • 问题解决:配置MinIO服务端口映射

    -p 9001:9001
    

最终的启动指令

docker run \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-d \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=32345678" \
-v /usr/local/soft/minio/data:/data \
-v /usr/local/soft/minio/config:/root/.minio \
minio/minio \
server \
/data \
--console-address ":9000" \
--address ":9001"
  • docker run:命令用于创建和运行Docker容器。

  • -p:选项指定了端口映射

    • -p 9000:9000:将主机的9000端口映射到容器内部的9000端口,以便通过主机的9000端口访问MinIO控制台。
    • -p 9001:9001:将主机的9001端口映射到容器内部的9001端口,以便通过注解的9001端口访问MinIO服务
  • --name minio:选项为容器指定了一个名称,即"minio",这样可以方便地引用该容器。

  • -d:选项将容器设置为“后台模式”,使得容器在后台运行。

  • --restart=always:选项指定了容器的重启策略,即容器在退出时总是自动重新启动。

  • -e "MINIO_ROOT_USER=root":选项通过环境变量设置MinIO的访问密钥(Access Key)为"root"。

  • -e "MINIO_ROOT_PASSWORD=32345678":选项通过环境变量设置MinIO的密钥(Secret Key)为"32345678"。

  • -v /usr/local/soft/minio/data:/data:选项指定了数据卷的挂载,将主机的"/home/data"目录挂载到容器的"/data"目录,用于持久化存储MinIO的数据。

  • -v /usr/local/soft/minio/config:/root/.minio:选项指定了配置卷的挂载,将主机的"/home/config"目录挂载到容器的"/root/.minio"目录,用于持久化存储MinIO的配置文件。

  • minio/minio:指定使用的镜像名称为minio/minio,即MinIO官方提供的Docker镜像。

  • server /data:参数指定了MinIO服务器的配置。"/data"是MinIO服务器将用于存储数据的目录路径。

  • --console-address ":9000":指定MinIO控制台端口,确保任何尝试连接到这个端口的客户端或应用程序都可以使用这个端口

  • --address ":9001":指定MinIO服务端口,将Docker守护程序绑定到指定的端口上

成功启动并访问

image-20231019161516688

总结前四个问题,本质都是启动指令的问题

问题5:上传文件报错Unsupported OkHttp library found. Must use okhttp >= 4.8.1

注意:这几个问题不是同一个项目中遇到的,前面4个问题是在SpringBoot整合MinIO遇到的,后面的问题是平常开发中遇到的

  • 问题:上传文件报错Unsupported OkHttp library found. Must use okhttp >= 4.8.1

    image-20231022113117214

  • 问题原因:SpringBoot版本问题(本质是OkHttp和MinIO版本不兼容)

    MinIO依赖中有使用到OkHttp依赖,因为客户端与服务端发送文件都是需要发送Http请求的,这个OkHttp依赖的版本会受到SpringBoot版本的影响,SpringBoot2.3版本使用的是OkHttp3,SpringBoot2.7版本使用的是OkHttp4,而我当前项目中使用的MinIO是8.5.2,这个版本最低要求是是4.x,而我使用的SpringBoot2.3,自动就引入了OkHttp3.x,导致不兼容

    image-20231022113230138

    一下是常见的MinIO版本与OkHttp版本的对照情况:

    MinIO 版本最低 OkHttp 版本要求兼容 OkHttp 版本
    8.x.x4.8.14.x.x, 5.x.x
    7.x.x3.14.03.x.x
    6.x.x3.12.03.x.x
  • 解决方法

    • 方案一:提高SpringBoot版本,将SpringBoot版本提高至2.4,2.4版本的SpringBoot版本默认改用了OkHttp4,刚好和 MinIO8.x兼容(不推荐,因为项目更换SpringBoot版本成本比较高)

    • 方案二:降低MinIO版本,将MinIO的版本降低至7.x,这个版本的MinIO兼容OkHttp3.x(不太推荐)

    • 方案三:直接手动引入OkHttp4.x,覆盖掉SpringBoot中的OkHttp3.x

              <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version><exclusions><exclusion><artifactId>okhttp</artifactId><groupId>com.squareup.okhttp3</groupId></exclusion></exclusions></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.3</version></dependency>
      

      PS:还有一个注意点,如果我这个minio是一个starter,那么在starter中排除OkHttp版本再引入是无效的,需要到引用starter的项目中去排除OkHttp版本,然后再引用对应的OkHttp版本

参考文章

  • docker搭建最新minio访问不了页面解决及注意事项-CSDN博客
  • Java MINIO使用踩坑&解决_-CSDN博客
  • Minio Unsupported OkHttp library found. Must use okhttp >= 4.8.1_嘟嘟Listing的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/148088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 吞吐量Per User作用

第一点&#xff1a;Per User仅在Total Execution时生效 第二点&#xff1a;Per User 选中后 聚合报告中将统计的的样本数将变成线程组配置的线程数*吞吐量控制器配置的执行样本数量&#xff08;前提是线程组配置执行接口的次数线程数*循环数 大于吞吐量控制器配置的执行样本数…

gittee启动器

前言 很多小伙伴反馈不是使用gitee&#xff0c;不会寻找好的项目&#xff0c;在拿到一个项目不知道从哪里入手。 鼠鼠我呀就是宠粉&#xff0c;中嘞&#xff0c;老乡。整&#xff01;&#xff01;&#xff01; git的基本指令 在使用gitee的时候呢&#xff0c;我们只需要记住…

Adversarially Robust Neural Architecture Search for Graph Neural Networks

Adversarially Robust Neural Architecture Search for Graph Neural Networks----《面向图神经网络的对抗鲁棒神经架构搜索》 摘要 图神经网络&#xff08;GNN&#xff09;在关系数据建模方面取得了巨大成功。尽管如此&#xff0c;它们仍然容易受到对抗性攻击&#xff0c;这对…

力扣周赛372 模拟 思维 位运算 java

100131. 使三个字符串相等 ⭐ AC code class Solution {public int findMinimumOperations(String s1, String s2, String s3) {int len1 s1.length();int len2 s2.length();int len3 s3.length();int n Math.min(len1,len2);n Math.min(n,len3);int i 0;while(i < n…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…

基环树(pseudotree)入门

目录 无向基环树找环&#xff0c;[题目](https://www.luogu.com.cn/problem/P8655)拓扑排序找环并查集找环dfs找环 内向基环树[2876. 有向图访问计数](https://leetcode.cn/problems/count-visited-nodes-in-a-directed-graph/description/)[2127. 参加会议的最多员工数](https…

python表白弹框

# codinggbk import tkinter as tk import random# 创建主窗口并隐藏 root tk.Tk() root.attributes(-alpha, 0) # 设置主窗口为不可见# 表白内容 message "cnmsb"# 创建弹框函数 def create_popup():x random.randint(0, root.winfo_screenwidth()) # 随机生成…

取数游戏2(动态规划java)

取数游戏2 题目描述 给定两个长度为n的整数列A和B&#xff0c;每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax&#xff0c;则第i次取走的数的价值vibi⋅ax&#xff0c;现在希望你求出∑vi的最大值。 输入格式 第一行一个数T &#xff0c;表示有T 组数据。…

【C++】:模板的使用

目录 1、泛型编程 2、函数模板 2.1、函数模板概念 2.2、函数模板格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.6、模板参数的匹配原则 3、类模板 3.1、 类模板的定义格式 3.2、 类模板的实例化 4、非类型模板参数 5、模板的特化 5.1、函数模板特化 5.2、类模…

公网访问全能知识库工具AFFINE,Notion的免费开源替代

文章目录 公网访问全能知识库工具AFFINE&#xff0c;Notion的免费开源替代品前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE 公网访问全能知识库工具AFFINE&#xff0c;Notion的免费开源替代品 前言 AFFiNE 是一个…

ChatGPT + Flutter快速开发多端聊天机器人App

在这个充满创新和机遇的时代&#xff0c;软件开发领域正在经历一场前所未有的变革。为了满足日益增长的用户需求和提升用户体验&#xff0c;我们引入了ChatGPT和Flutter两大技术&#xff0c;旨在打造一款功能强大、易于扩展的多端聊天机器人App。 ChatGPT&#xff1a;对话式人工…

04 后端增删改查【小白入门SpringBoot + Vue3】

项目笔记&#xff0c;教学视频来源于B站青戈 https://www.bilibili.com/video/BV1H14y1S7YV 保证前面的都功能都实现后&#xff0c;接着往下走。 查 分页 接下来&#xff0c;实现前端页面分页功能。 前端分页组件 打开elementplus官网&#xff0c;找到合适的分页组件&…

如何解决swagger-editor在线接口调试时的跨域问题

文章目录 一&#xff0c;序言二&#xff0c;问题重现1. 运行swagger-editor2. 运行接口服务3. 问题重现步骤 三&#xff0c;解决问题思路1. 去除浏览器安全限制2. 服务器接口统一处理3. 委托nginx转发 四&#xff0c;完整接口代码传送 一&#xff0c;序言 在 Docker 运行swagg…

光敏传感器模块(YH-LDR)

目录 1. YH-LDR模块说明 1.1 简介 1.2 YH-LDR 模块的引脚说明 1.3 LDR 传感器工作原理与输出特性 2. 使用单片机系统控制 YH-LDR 模块 2.1 通用控制说明 1. YH-LDR模块说明 1.1 简介 YH-LDR 是野火设计的光强传感器&#xff0c;使用一个光敏电阻作为采集源&#x…

【C++】多线程的学习笔记(3)——白话文版(bushi

目录 前一篇内容&#xff08;mutex锁&#xff09; 前言 Condition Variable的简介 Condition Variable的使用方法 wait方法 wait for函数与wait until函数 notify函数 notify_one notify_all 注意 前一篇内容&#xff08;mutex锁&#xff09; 【C】多线程的学习笔记&…

pythongui实时闹钟

# codinggbk import tkinter as tk from time import strftime# 创建一个主窗口 root tk.Tk() root.title("实时闹钟")# 设置窗口的大小不可变 root.resizable(False, False)# 设置窗口始终保持在最上层 root.attributes(-topmost, True)# 更新时间的函数 def time(…

java游戏制作-拼图游戏

一.制作主界面 首先创建一个Java项目命名为puzzlegame。 再在src中创建一个包&#xff0c;用来制作主界面 代码&#xff1a; 结果&#xff1a; 二.设置界面 代码&#xff1a; 三.初始化界面 代码&#xff1a; 优 化代码&#xff1a; 结果&#xff1a; 四.添加图片 先在Java项…

mysql查询json字符串内容

参考文章&#xff1a;mysql json 基础查询_mysql json查询-CSDN博客 mysql查询json字符串内容 &#xff08;多层数组嵌套&#xff09; select id,nameJSON_EXTRACT(JSON_UNQUOTE(JSON_EXTRACT(JSON_UNQUOTE(config_json), $.baseInfo)), $.template_list[*].sms_content) s…

03 前后端数据交互【小白入门SpringBoot + Vue3】

项目笔记&#xff0c;教学视频来源于B站青戈 https://www.bilibili.com/video/BV1H14y1S7YV 前两个笔记。是把前端页面大致做出来&#xff0c;接下来&#xff0c;把后端项目搞一下。 后端项目&#xff0c;使用IDEA软件、jdk1.8、springboot2.x 。基本上用的是稳定版。 还有My…

【C++】chono库:使用及源码分析

文章目录 0. 概述1. duration1.1 分析std::chrono::duration_cast() 1.2 使用案例std::chrono::duration::count() 1.3 部分源码 2. time_point2.1 分析std::chrono::time_point_cast() 2.2 使用举例std::chrono::time_point::time_since_epoch() 2.3 部分源码 0. 概述 本篇文…