问题起因
业务application和minio都是docker部署。按部署规则minio的环境变量中设置了MINIO_ROOT_USER和MINIO_ROOT_PASSWORD。这样就可以用这套用户名密码登录minio了。而我的application中是通过api访问minio获取资源URL,提供给前端的。所以在application的环境变量中也配置这套用户名和密码。按理说这样启动,使用minio完全没有问题的。
然而,幺蛾子出在minio启动时报端口占用。
于是等了几天,被另一个同事处理了minio端口占用,并且把minio环境变量的密码给改了。minio可以正常登录和使用。可是,application访问minio用的还是之前的老密码,能拿到访问图片返回的URL,却死活,不能把图片展示出来,前端报错:Failed to load response data: No data found for resource with given identifier,图片破裂:
问题排查
1、排查了minio服务、application服务的环境变量配置,的确发现两边minio的密码不一致。于是把application服务的配置改正确。【重启】了application容器,然后还是访问不到图片。报错信息并没有发生变化。
2、登录minio查看桶的配置,也很其他环境的一模一样。排除配置问题。
3、重新设置了minio和application服务中minio的登录密码。再重启服务还是看不到图片,只能看到图片连接。
4、百度、帖子看了,都没找到解决办法。
问题解决
思考: 为什么会能拿到URL连接,却访问不到资源呢?
猜测: 获取URL连接的API可以访问通,但是真正去获取资源时,被服务器拒绝了。
大胆尝试: 在正确的测试环境,把application服务中minio密码改错,【重启】服务,发现图片居然还能正常访问,惊掉下巴。再大胆尝试,把minio服务的环境变量密码改了,【重启】minio服务,发现用原来的密码能登录上去,而用刚配置的新密码却登录不成。
豁然开朗: 肯定是【重启】没有真正生效!docker容器中用的还是之前环境变量。
解决办法:
先停掉minio服务,然后移除minio的docker容器,重新发布一个新的docker容器。再用老密码登录minio,登录失败,用新密码登录,登录成功!对application服务同样一顿骚操作,图片访问正常了!
问题解决!撒花*~*
经验总结
docker容器的环境变量修改后,需要重新up -d 容器,仅仅restart容器,并不能应用新的配置信息。