容器中WebSphere Application Server停止时能否保持端口开放以支持远程启停
问题根因
RAD与远程WebSphere Application Server(WAS)的管理通信,完全依赖WAS运行时主动暴露的管理端口(默认SOAP管理端口8880、HTTP管理控制台端口9060)。当你执行服务器停止操作后,容器内的WAS进程会终止,对应的管理端口也会停止监听,此时容器本身即便保持运行,也没有可响应RAD管理请求的服务进程,自然无法建立连接发起启动指令。
可行的解决方案
- 方案1:容器内置常驻SSH管理入口
构建镜像时将sshd服务设为容器的1号常驻进程,WAS配置为系统服务由init/systemd托管,容器启动时默认启动sshd和WAS,同时将sshd的22端口映射到宿主机对外暴露。
修改RAD的WAS服务器配置,自定义启停操作脚本:启动逻辑改为通过ssh登录容器执行WAS启动命令{WAS安装目录}/profiles/[配置文件名]/bin/startServer.sh [服务器名],停止操作可保留原生RAD远程停止逻辑,也同步配置为ssh调用停止脚本。 - 方案2:通过WAS节点代理托管应用服务(仅ND版本适用)
如果你使用的是WAS Network Deployment版本,可在容器内常驻运行节点代理(Node Agent),将目标应用服务器注册到节点代理下。RAD直接对接节点代理或Deployment Manager的管理端口,后续启停应用服务的指令都发送给节点代理,哪怕应用服务器进程停止,只要节点代理保持运行就可以接收指令完成启动操作。 - 方案3:直接通过容器运行时执行启停命令
不依赖WAS自带的远程管理能力,调整RAD的自定义脚本逻辑,启停操作都通过容器运行时命令直接在容器内执行脚本:比如Docker环境用docker exec [容器名] /bin/bash {WAS启动脚本路径},K8s环境用kubectl exec [Pod名] -- /bin/bash {WAS启动脚本路径},全程不需要和WAS的管理端口通信。
提示:如果容器的1号进程是WAS本身,WAS停止后容器会直接退出,不存在“容器运行但WAS停止”的场景,所以上述方案都需要先保证容器有常驻的1号进程
内容的提问来源于stack exchange,提问作者boyhenryalpha
相关产品推荐
相关产品推荐

