项目场景
在虚拟机上用docker安装了minio,minio的端口号是9000
问题描述
在浏览器上无法访问minio服务
解决方案
- 首先想到的是,防火墙将端口号9000给屏蔽了,因此将防火墙关闭:
# 暂时性的(重启后失效)
# 开启
service firewalld start
# 关闭
service firewalld stop
# 永久性的
# 关闭
systemctl disable firewalld.service
# 查看防火墙状态,如果有dead则为关闭
service firewalld status
- 但是关闭防火墙以后,发现还是不能访问9000端口,并且发现防火墙本来就是关着的,误以为是开着的。所以问题并不在于防火墙。
- 那么问题到底在哪儿呢?看一下日志再说吧(docker logs 容器id),如下所示:
- 在网上搜了搜,有一篇文章(链接)是这么说的:
大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
- 因此,需要在创建容器的时候添加-
-privileged=true
- 所以我就把原来的iminio容器给删除了(删除命令 docker rm -f 容器id, 容器创建失败,依然有可能会占用容器name,也需要执行这个命令),重新创建了一次。
- 但是,端口9000依然不能访问。
- 我又在另一篇文章中(链接)看到:
动态端口云服务器会改变,需要在docker run 最后加上:
--console-address ":9000" --address ":9090"
- 所以我又删除了原来的容器,再次创建容器,完整的创建容器的命令如下:
docker run -d -p 9000:9000 --name=minio --restart=always --privileged=true -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin123456" -v /home/data:/data -v /home/config:/root/.minio minio/minio server /data --console-address ":9000" --address ":9090"
- 这次终于可以正常访问minio服务了:
总结
排查这个问题几乎花费了我一下午的时间,到最后快没有什么耐心了,还好没有放弃,终于成功解决。