如何在默认情况下为 IBM Websphere Traditional Image 在 Docker 中启用 DEBUG 模式

问题描述 投票:0回答:2

我们有一个运行在传统 websphere 上的应用程序 WAR。对于本地测试,我们基于“ibmcom/websphere-traditional:8.5.5.22”docker 镜像为我们的应用程序创建了一个 docker 镜像。

这样工作正常,但是当我想通过远程调试在 docker 容器中调试我的应用程序时,我必须先通过管理控制台手动为服务器启用 DEBUG 模式。然后我需要重新启动服务器/容器。

我想知道是否有不同的方法来做到这一点?就像将一些道具应用到默认情况下以 DEBUG 模式启动我的应用程序服务器的新图像?

谢谢

更新

我一直在玩 wsadmin 脚本。当通过 Web 管理控制台进行更改并按照 lwestby 的建议编写更改脚本时,我想出了以下 python 函数,我将其包含在我们的 install.py 中。

但它没有完成这项工作。我实际上在哪里可以看到此类 python 脚本的记录器或标准输出输出?

谢谢

def enableDebug():
    try:
        server1 = AdminConfig.getid('/Cell:DefaultCell01/Node:DefaultNode01/Server:server1/')
        AdminConfig.create('DebugService', server1, '[[BSFDebugPort "4444"] [enable "true"] [jvmDebugPort "7777"] [jvmDebugArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777"] [debugClassFilters ""] [BSFLoggingLevel "0"]]')
        jvm = AdminConfig.list('JavaVirtualMachine', server1)
        AdminConfig.modify(jvm[0], '[[debugMode "true"]]')
    except:
        logger("EXCEPTION ENABLING DEBUG FOR server1")
docker debugging websphere websphere-8
2个回答
2
投票

你是对的,你需要从以调试模式启动的基础镜像配置一个新镜像。因为听起来您已经尝试在管理控制台中切换它,您实际上可以通过执行您所做的并在右列中查找命令帮助标题来获取 wsadmin 命令来更改 JVM 设置:

一旦选中复选框以启用调试模式并单击“确定”,单击“查看上次操作的管理脚本命令”链接以获取命令,例如:

AdminTask.setJVMProperties('[-nodeName DefaultNode01 -serverName server1 -verboseModeClass false -verboseModeGarbageCollection true -verboseModeJNI false -runHProf false -hprofArguments -debugMode true -debugArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777" -executableJarFileName -genericJvmArguments "-Xnoloa" -disableJIT false]')

(不要只是复制粘贴我在这里的内容,以防您的图像更改了其他设置。)

然后您可以将此链接添加到现有的或新的 wsadmin

.py
文件,您将其应用为 image 构建过程 的一部分。确保文件在命令后运行
AdminConfig.save()

然后构建一个新镜像,默认情况下该镜像应该以调试模式启动。


0
投票

从管理控制台更新中提取基于属性文件的配置的解决方案

  1. 启动初始容器

docker run --name mywas -p 9043:9043 -p 9443:9443 ibmcom/websphere-traditional:8.5.5.22

  1. 获取生成的 wsadmin 密码

docker exec -it mywas  bash -c "cat /tmp/PASSWORD";

  1. 打开管理控制台(将浏览器指向:https://localhost:9043/ibm/console/ )

  2. 单击以启用服务器进行调试(使用调试服务应用程序服务器>服务器1>进程定义> Java虚拟机

  3. 点击应用保存

  4. 启动 wsadmin

docker exec -it mywas bash -c "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh -lang jython -user wsadmin -password <password>"
(如果出现提示,请接受自签名证书)

  1. (在 wsadmin 会话中),提取属性

print AdminTask.extractConfigProperties('-configData Node=DefaultNode01 -propertiesFileName /home/was/jvm.props -filterMechanism SELECTED_SUBTYPES -selectedSubTypes JavaVirtualMachine')

  1. 回到主机,从容器中复制属性

docker cp mywas:/home/was/jvm.props jvm.props

  1. jvm.props 属性文件复制到 Dockerfile 的位置并将 COPY 添加到 /work/config
FROM ibmcom/websphere-traditional:8.5.5.22
COPY --chown=was:root jvm.props /work/config/
RUN /work/configure.sh
  1. docker 构建(注意它会花费一些时间,因为您的道具是通过 wsadmin 通过 websphere docker 工具实用程序“应用”的)

您的新图像将启用调试。

评论

这显然比添加单个 wsadmin 脚本(如@lwestby 的回答)更有效。属性文件方法的一个好处是您只需学习一个 wsadmin 命令 AdminTask.extractConfigProperties,而不是为每个管理/配置对象类型学习不同的命令。在 lwestby 的回答中提到的帮助下,学习不同的命令并不像看起来那么困难,但有时更直接地使用 properties 可能会更容易,可能会过滤它们,就像在示例中一样在这个答案中。

© www.soinside.com 2019 - 2024. All rights reserved.