我试图将运行在我的Windows主机上的Eclipse调试器连接到运行CentOS 7的Vagrant框中运行的Tomcat 8服务器。
这个问题与Vagrant的网络设置有关。我相信。
以下是Eclipse日志的完整错误:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:179)
at java.io.DataInputStream.readFully(DataInputStream.java:189)
at java.io.DataInputStream.readFully(DataInputStream.java:163)
at org.eclipse.jdi.internal.connect.SocketTransportService.readHandshake(SocketTransportService.java:216)
at org.eclipse.jdi.internal.connect.SocketTransportService.access$7(SocketTransportService.java:212)
at org.eclipse.jdi.internal.connect.SocketTransportService$3.run(SocketTransportService.java:183)
at java.lang.Thread.run(Thread.java:761)
vagrant up
的输出似乎正确(端口8000是调试端口):
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 8000 => 8000 (adapter 1)
default: 8443 => 8443 (adapter 1)
default: 22 => 2222 (adapter 1)
我可以通过浏览器从我的主机访问我的应用程序(使用https://localhost:8443/app)而不会出现问题;连接调试器是个问题。调试器配置为具有连接属性的远程Java应用程序:
Host: localhost
Port: 8000
启动Tomcat当然会显示正确的:
Listening for transport dt_socket at address: 8000
基于以下问题,答案可能与配置Tomcat以在0.0.0.0
而不是默认值上运行有关:
Cannot reach Jekyll server on Vagrant from outside
Vagrant port forwarding not working. Cups not accesible from host
Empty reply from server - can't connect to vagrant vm w/port forwarding
Connection Reset when port forwarding with Vagrant
所以我尝试使用行address="0.0.0.0"
在Tomcat的server.xml中配置连接器,但结果是相同的。
关于让它发挥作用的任何其他想法?另外,假设答案与将地址更改为0.0.0.0
有关,为什么我需要这样做才能使调试器工作,如果通过浏览器访问应用程序已经localhost:8443
已经很好了? / p>
P.S。这不是防火墙问题。
答案 0 :(得分:2)
我在正确的轨道上将地址更改为0.0.0.0
,但我在server.xml中的Connector
上进行了更改,这与调试器无关。解决方案是更改导致JPDA_ADDRESS
获取的bin/setenv.sh
:
JPDA_ADDRESS="0.0.0.0:8000"
这是由于change in Tomcat 8:
使用jpda选项启动Tomcat以启用远程调试时, Tomcat 8默认侦听localhost:8000。早期版本 听了*:8000。如果需要,可以覆盖此默认值 例如,设置JPDA_ADDRESS环境变量 。SETENV。[蝙蝠| SH]