首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用IntelliJ在Docker容器内调试Websphere Application Server

无法使用IntelliJ在Docker容器内调试Websphere Application Server
EN

Stack Overflow用户
提问于 2020-09-22 04:48:36
回答 2查看 598关注 0票数 0

我正在尝试将WAS移动到容器中,并继续拥有调试它的能力。它是一个传统的WAS版本8.5.5.17。我尝试了多种方法,但无法使用IntelliJ成功附加远程调试器。在查看server.xml时,WAS设置为debugMode,但没有侦听端口。与调试相关的JVM属性设置如下:

代码语言:javascript
复制
debugMode="true" debugArgs="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777" genericJvmArguments=""

Dockerfile:

代码语言:javascript
复制
FROM ibmcom/websphere-traditional:8.5.5.17

COPY db /work/config/db
COPY MQ /work/config/MQ
COPY earear /work/config/ear.ear
COPY custom_jvm_properties.txt /work/config/custom_jvm_properties.txt
COPY file.properties /work/config/file.properties
COPY Sscript.py /work/config/Script.py
COPY jars/work/config/jars
RUN mkdir -p /work/config/Folder

RUN /work/configure.sh

#ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777
EXPOSE 80 9080 9448 9443 9060 9043 7777

当我使用上面的文件构建镜像时,容器构建并且应用程序可以运行。取消#ENV行的注释会导致构建镜像,但运行容器会导致以下错误:

代码语言:javascript
复制
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:762]

我的docker run命令如下:

代码语言:javascript
复制
docker run -p 80:80 -p 9080:9080 -p 9448:9448 -p 9443:9443 -p 9060:9060 -p 9043:9043 -p 7777:7777 -v C:\volume:/volume --name ContainerName image

尝试将JAVA_TOOL_OPTIONS作为环境变量传递也不起作用。此时,我可以在调试模式下启动服务器,但没有任何侦听端口可以附加调试器,或者服务器无法使用侦听端口启动,因为上面的错误。

EN

回答 2

Stack Overflow用户

发布于 2020-09-22 05:17:38

而不是使用

代码语言:javascript
复制
#ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777

我认为推荐的步骤是将这些调试选项放在一个属性文件(debug.props)中,放在以下位置:

代码语言:javascript
复制
debugArgs="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777"

然后复制到您的docker镜像:

代码语言:javascript
复制
COPY --chown=was:root debug.props /work/config/debug.props

最后,应用以下配置:

代码语言:javascript
复制
RUN work/applyConfig.sh /work/config/debug.props

请参阅此处的示例项目:https://github.com/WASdev/ci.docker.websphere-traditional/tree/10367b51ccbf489cd6e1655769b968e9d9bfca13/samples/batch-compute-grid

票数 1
EN

Stack Overflow用户

发布于 2020-09-22 21:27:26

在使用IntelliJ之后,我设法弄明白了这一点。

我试着遵循这个指南https://blog.jetbrains.com/idea/2019/04/debug-your-java-applications-in-docker-using-intellij-idea/

然而,它需要一些额外的设置。我必须将websphere镜像配置为构建,并将其设置为始终在调试模式下启动(这可能会进一步导致速度减慢,但这是一个允许我进行调试的变通方法,并且可以在重新构建镜像时删除)。在此之后,我只能在服务器完全启动后附加远程调试器。没有提示表明服务器有可用端口可供监听,但它确实有。使用“在调试前启动docker”选项将导致附加失败。谢谢你的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63999792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档