部署至Websphere(WAS)的应用启动后状态为unknown如何排查
WebSphere 9.0.5 Docker 镜像应用部署问题排查方案
1. 定位运行日志
- 官方
ibmcom/websphere-traditional镜像默认将server1进程的标准输出、错误流重定向到容器控制台,不会在/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1目录生成落盘的SystemOut.log、SystemErr.log文件,直接执行docker logs <WAS容器ID/容器名>即可查看完整的进程运行日志。 - 如果需要日志落盘存储,启动容器时添加环境变量
CONSOLE_LOG=false,重启容器后就会在对应日志目录生成落盘日志文件。
2. 查看应用真实状态
跳过Web控制台的显示缓存,直接通过wsadmin命令行查询应用的真实运行状态:
- 进入容器内部:
docker exec -it <WAS容器ID/容器名> /bin/bash - 切换到profile的bin目录:
cd /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin - 启动wsadmin交互终端:
./wsadmin.sh -lang jython -username <控制台账号> -password <控制台密码> - 执行命令查询已注册的应用列表,确认应用部署成功:
print AdminApp.listApplications() - 执行命令查询应用运行状态,如果返回非空字符串说明应用已运行,返回空说明应用未启动:
print AdminControl.completeObjectName('type=Application,name=<你的应用名称>,*') - 强制启动应用,执行过程中会直接输出具体报错信息:
AdminControl.invoke(AdminControl.queryNames('type=ApplicationManager,process=server1,*'), 'startApplication', '[<你的应用名称>]')
3. 常见异常修复方案
- 配置未同步:部署应用完成后必须点击Web控制台顶部提示栏的「保存」按钮,将临时会话配置同步到主配置库,未保存的配置不会被server1进程加载,会导致应用状态显示异常。
- 上下文根冲突:如果应用指定的上下文根被WAS默认的DefaultApplication占用,部署不会报错但应用无法启动,可以在部署时手动指定未被使用的上下文根,或者先卸载默认的DefaultApplication再重新部署。
- 文件权限不足:WAS进程默认使用
was用户运行,如果上传的war包是root用户传入容器,需要给war包添加公共读权限:chmod o+r <war包存储路径>,之后重新部署即可。
内容的提问来源于stack exchange,提问作者curious_capybara
相关产品推荐
相关产品推荐

