如何排查Docker部署WSO2 MI Dashboard登录失败(内部服务器错误)问题
错误核心分析
从日志中的报错可以定位问题根源:
[2023-01-12 07:40:08,602] ERROR {LoginDelegate} - Error logging into dashboard server java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0 ... at java.base/java.util.ArrayList.get(ArrayList.java:459) at org.wso2.ei.dashboard.core.rest.delegates.auth.LoginDelegate.getTokenFromMI(LoginDelegate.java:80)
这个异常说明Dashboard在调用Micro Integration(MI) Server获取登录token时,尝试读取一个空列表的第0位,即MI Server返回的结果为空或不符合预期,导致登录逻辑崩溃。
排查方向
验证容器间通信与MI Server端点可用性
在Dashboard容器内,直接调用MI Server的OAuth2 token生成端点(示例:curl -k -d "grant_type=password&username=<admin-user>&password=<admin-pass>&scope=apim:api_view" https://<mi-server-host>:9443/oauth2/token),确认是否能正常返回包含access_token的JSON数据。如果请求失败,检查Docker网络配置、MI Server容器是否正常运行、端口映射是否正确。检查新流程对MI Server OAuth配置的影响
新添加的流程可能意外修改了MI Server的OAuth相关配置:- 查看MI Server的
deployment.toml,确认[oauth.config]下的token端点启用状态、支持的授权类型配置未被篡改; - 确认登录用户在MI Server中仍拥有
admin或具备Dashboard访问权限的角色,未被新流程的配置覆盖。
- 查看MI Server的
核对Dashboard的MI Server节点配置
检查Dashboard的dashboard-conf/deployment.toml,确认其中配置的MI Server地址、端口是否准确。若新流程部署后MI Server容器重启导致IP变更,会使Dashboard无法正确请求token,需手动更新配置后重启Dashboard容器。查看MI Server的日志详情
同步查看MI Server的日志文件,确认当Dashboard发起token请求时,MI Server是否有认证失败、token生成报错或资源不足的记录,这些信息能进一步定位问题。清理缓存并重启容器
分别清理Dashboard和MI Server容器内的tmp、work缓存目录,然后按顺序重启MI Server、Dashboard容器。新流程可能导致缓存数据异常,引发token获取逻辑出错。
内容的提问来源于stack exchange,提问作者Валерий Антропов

