使用JPDA won'进行远程调试;使用Docker Compose时,不能通过eclipse连接到Tomcat

使用JPDA won'进行远程调试;使用Docker Compose时,不能通过eclipse连接到Tomcat,eclipse,tomcat,docker,docker-compose,remote-debugging,Eclipse,Tomcat,Docker,Docker Compose,Remote Debugging,我对Docker很陌生,所以这可能是我做错的简单事情。 有了所有的解决方案,当使用“Docker run”启动Tomcat容器时,我能够使用eclipse进行远程调试 docker运行-it--rm-e JPDA_地址=8000-e JPDA_传输=dt_套接字-p 8888:8080-p 8000:8000 tomcat:8.0-jre8/usr/local/tomcat/bin/catalina.sh JPDA运行 然而,当使用docker compose时,我得到一个“连接到远程VM失败。

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

docker运行-it--rm-e JPDA_地址=8000-e JPDA_传输=dt_套接字-p 8888:8080-p 8000:8000 tomcat:8.0-jre8/usr/local/tomcat/bin/catalina.sh JPDA运行

然而,当使用docker compose时,我得到一个“连接到远程VM失败。连接被拒绝”对话框

docker编写

docker-compose.yml设置:

tomcat:
图片:tomcat:8.0-jre8
#启动-远程调试设置
#使用或不使用此网络模式设置都无法工作。但是“docker container inspect*CID*”中的桥接设置看起来与工作解决方案几乎相同
网络模式:网桥
环境:
-JPDA_地址:8000
-JPDA_传输:dt_插座
入口点:/usr/local/tomcat/bin/catalina.sh jpda运行
#结束-远程调试设置
部署:
重新启动\u策略:
条件:故障时
安置:
约束:[node.role==manager]
端口:
- 8888:8080
#远程调试设置jpda端口
-8000:8000

使用“docker run”的eclipse设置包括:

远程Java应用程序:
主机:本地主机
端口:8000

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

监听地址为8000的传输dt\U插座

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

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


你有没有想过为什么用这种方式启动时不能进行远程调试?我怀疑网络配置的设置方式有细微的差别。

我的一个朋友发现了这一点。尽管启动输出显示一切正常,catalina.sh使用的默认端口和传输是8000,dt_socket

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

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

docker exec -it *CID* bash
env
对my docker-compose.yml文件的更改现在如下所示:

   environment:
     JPDA_ADDRESS: 8000
     JPDA_TRANSPORT: dt_socket
通常我们使用

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

我也遇到了同样的问题,但是我的用于调试的env值被正确地加载到了一个容器中。顺便说一句,您在docker-compose.yml中对env值的更改似乎有点不同