使用 Docker-Compose 时,使用 JPDA 进行远程调试不会通过 Eclipse 连接到 Tomcat
Remote Debugging with JPDA won't connect to Tomcat through eclipse when using Docker-Compose
我是 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 时,我得到一个 "Failed to connect to remote VM. Connection refused" 对话框。
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' 配合使用的日食设置是:
Remote Java Application:
Host: localhost
Port: 8000
注意:使用 docker-compose 设置,我还在启动输出中看到预期的打印:
Listening for transport dt_socket at address: 8000
并且对于这两种部署,我都可以通过公开的端口 8888 访问 Web 服务的功能。即。这个简单的linkreturns'Hello'.
http://localhost:8888/MyEmulatorService/rest/MES/
想知道为什么我在以这种方式启动时无法进行远程调试吗?我怀疑网络配置的设置方式存在细微差别。
我的一个朋友解决了这个问题。尽管启动输出让它看起来一切正常并且 catalina.sh 使用的默认端口和传输是 8000,dt_socket.
环境变量没有传递到容器中,这导致了损坏。也许其他人可以解释这对 .sh 脚本有何影响?
这个问题是通过隧道进入容器并列出环境变量检测到的。
docker exec -it *CID* bash
env
我的 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
我是 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 时,我得到一个 "Failed to connect to remote VM. Connection refused" 对话框。
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' 配合使用的日食设置是:
Remote Java Application:
Host: localhost
Port: 8000
注意:使用 docker-compose 设置,我还在启动输出中看到预期的打印:
Listening for transport dt_socket at address: 8000
并且对于这两种部署,我都可以通过公开的端口 8888 访问 Web 服务的功能。即。这个简单的linkreturns'Hello'.
http://localhost:8888/MyEmulatorService/rest/MES/
想知道为什么我在以这种方式启动时无法进行远程调试吗?我怀疑网络配置的设置方式存在细微差别。
我的一个朋友解决了这个问题。尽管启动输出让它看起来一切正常并且 catalina.sh 使用的默认端口和传输是 8000,dt_socket.
环境变量没有传递到容器中,这导致了损坏。也许其他人可以解释这对 .sh 脚本有何影响?
这个问题是通过隧道进入容器并列出环境变量检测到的。
docker exec -it *CID* bash
env
我的 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