【问题记录】idea连接docker中的tomcat容器debug

记录一次远程调试的问题

需求

idea debug remote docker tomcat

环境

docker image: tomcat:9.0.56-jdk17

错误提示

Error running Debugger: Unable to open debugger port (localhost:40003): 
java.io.IOException "handshake failed - connection prematurally closed"

错误原因

catalina.sh中自jdk9后,默认jpda使用loacalhost:8000作为socket监听地址,之前版本未对ip做限制。

Tomcat容器中catalina.sh部分命令

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="localhost:8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
  shift
fi

docker run命令

docker run --name=***** -tid \
 --restart=always \
 --link *****:***** \
 --link *****:***** \
 -p *****:8080 \
 -p 40003:8000 \
 -p *****:***** \
 -e ACCEPT_ORACLE_BCLA=***** \
 -v *****:/usr/local/tomcat/webapps \
 -v *****:/usr/local/tomcat/work \
 -v *****:/usr/local/tomcat/logs \
 -v *****:/etc/localtime:ro \
 -v *****:/etc/timezone:ro \
 $NAME:$VERSION \
 catalina.sh jpda run

docker ps -a

解决方案

docker run时设置环境变量覆盖默认的即可

-e JPDA_ADDRESS=*:8000

最终使用

在这里插入图片描述

参考

https://stackoverflow.com/questions/30858312/handshake-failed-connection-prematurally-closed-error-when-debugging-solr-in-i

https://bugs.openjdk.java.net/browse/JDK-8175050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏晓星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值