【发布时间】:2018-04-20 11:06:46
【问题描述】:
我有一个基于 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 图像,但不幸的是得到了相同的结果。
【问题讨论】:
-
试试
address=0.0.0.0:49540看看有没有帮助 -
在JDK 9中,JDWP默认绑定到localhost,yu可能需要指定address=*。此处发布说明中的更多详细信息:oracle.com/technetwork/java/javase/…
-
@AlanBateman 非常感谢您提供的线索!我试图指定地址 -
*和具体的 IP 地址192.168.16.1。现在我在Tomcat启动过程中遇到以下错误:ERROR: transport error 202: bind failed: Cannot assign requested address ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:730]我试图从容器中ping IP地址并且它成功了。 -
"Cannot assign ..." 表明这不是 docker 容器中的地址。我很惊讶
address=*:49540不起作用,因为它相当于 JDK 8 中的address=49540。
标签: java tomcat docker remote-debugging java-9