gpt4 book ai didi

java - 无法在 docker 容器中的 Java 9 Tomcat 9 上进行远程调试

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:01 28 4
gpt4 key购买 nike

我有一个基于 opendjdk:8-slim 并安装了 Tomcat 9 的 Docker 容器,我正在调试从我的 IDE (IntelliJ) 部署的应用程序 - IDE 在 Docker 主机上运行。我使用以下配置运行 Tomcat

CATALINA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=49520 \
-Dcom.sun.management.jmxremote.rmi.port=49520 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.local.only=false \
-Djava.rmi.server.hostname=10.0.75.1 \
-agentlib:jdwp=transport=dt_socket,address=49540,suspend=n,server=y"

一切正常 - 我可以将 IDE 附加到容器。以下命令也有效(从 docker 主机执行)- 它可以连接到容器中的进程(容器中的端口 49540 映射到主机上的端口 49540):

docker-host$ telnet localhost 49540

现在我想升级到 Java 9。我将基本镜像从 openjdk:8-slim 更改为 openjdk:9-slim 但我无法连接到来自 docker 主机的调试器端口。同样在 IDE 中,我得到了 SocketTimeoutException: Connection reset。但是,在容器内部,我可以通过 telnet 连接到调试器。

我从 openjdk 存储库和其他存储库(例如 adenix/java)尝试了几个 Java 9 图像,但不幸的是结果相同。

最佳答案

最后,我找到了一种使用 Alan Bateman 提供的评论中的信息使其工作的方法。

我设置了 JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=*:4954‌ ,而不是在 CATALINA_OPTS 中设置调试设置(它可以毫无问题地与 JDK 8 一起使用) 0,server=y,suspend=n‌ " 并使用 catalina.sh jpda run 运行 Tomcat。具体的 IP 地址(例如 address=192.168.16.1:49540)对我来说仍然不起作用,尽管可以从容器内访问该 IP 地址。

关于java - 无法在 docker 容器中的 Java 9 Tomcat 9 上进行远程调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com