使用 Docker-Compose 时,使用 JPDA 进行远程调试不会通过 Eclipse 连接到 Tomcat

Posted

技术标签:

【中文标题】使用 Docker-Compose 时,使用 JPDA 进行远程调试不会通过 Eclipse 连接到 Tomcat【英文标题】:Remote Debugging with JPDA won't connect to Tomcat through eclipse when using Docker-Compose 【发布时间】:2018-01-05 02:56:37 【问题描述】:

我对 Docker 很陌生,所以这可能很简单,我做错了。 有了所有的解决方案,当使用 'Docker run' 启动 Tomcat 容器时,我已经能够使用 eclipse 进行远程调试。

docker run -it --rm -e JPDA_ADDRESS=8000 -e JPDA_TRANSPORT=dt_socket -p 8888:8080 -p 8000:8000 tomcat:8.0-jre8 /usr/local/tomcat/bin/catalina.sh jpda run

但是,当使用 docker-compose 时,我收到“无法连接到远程 VM。连接被拒绝”对话框。

docker-compose up

docker-compose.yml 设置:

tomcat: image: tomcat:8.0-jre8 # START - REMOTE DEBUGGING SETTINGS # Didn't work with or without this network_mode setting. But the bridge settings as seen with 'docker container inspect *CID*' looks almost identical to the working solution network_mode: bridge environment: - JPDA_ADDRESS:8000 - JPDA_TRANSPORT:dt_socket entrypoint: /usr/local/tomcat/bin/catalina.sh jpda run # END - REMOTE DEBUGGING SETTINGS deploy: restart_policy: condition: on-failure placement: constraints: [node.role == manager] ports: - 8888:8080 # REMOTE DEBUGGING SETTINGS jpda port - 8000:8000

我使用 'docker run' 的 Eclipse 设置是:

Remote Java Application: Host: localhost Port: 8000

注意:使用 docker-compose 设置,我还可以在启动输出中看到预期的打印:

Listening for transport dt_socket at address: 8000

而且在这两种部署中,我都可以通过公开的端口 8888 访问 Web 服务的功能。即。这个简单的链接返回“Hello”。

http://localhost:8888/MyEmulatorService/rest/MES/

关于为什么我在以这种方式启动时无法远程调试有什么想法吗?我怀疑网络配置的设置方式存在细微差别。

【问题讨论】:

【参考方案1】:

通常我们使用的是

 environment:
 - JAVA_OPTS= -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n

【讨论】:

【参考方案2】:

我的一个朋友发现了这一点。即使启动输出使它看起来一切正常,并且 catalina.sh 使用的默认端口和传输是 8000,dt_socket。

环境变量没有被传递到容器中,这导致了损坏。也许其他人可以解释这如何影响 .sh 脚本?

通过隧道进入容器并列出环境变量来检测到此问题。

docker exec -it *CID* bash
env

对我的 docker-compose.yml 文件的更改现在如下所示:

   environment:
     JPDA_ADDRESS: 8000
     JPDA_TRANSPORT: dt_socket

【讨论】:

我遇到了同样的问题,但我的调试环境值已正确加载到容器中。而且,BTH,您在 docker-compose.yml 中更改 env 值似乎有些不同

以上是关于使用 Docker-Compose 时,使用 JPDA 进行远程调试不会通过 Eclipse 连接到 Tomcat的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker-compose 时如何在容器内使用主机用户修改卷文件

在构建时使用 docker-compose 将环境变量传递给 docker 映像

使用 nvidia gpu 创建 docker-compose 时“不允许使用‘设备’属性”

使用 docker-compose 时导入 keycloak 配置文件

使用 Docker-Compose 时如何执行 Django 数据库迁移?

使用 docker-compose 在 Windows 上构建气流时出错