使用端口转发在 Vagrant 中调试 Tomcat 运行

Debugging Tomcat Running in Vagrant using Port Forwarding

我正在尝试将我的 Windows 主机上的 Eclipse 调试器 运行ning 连接到我的 Vagrant 盒子 运行 中的 Tomcat 8 服务器 运行ning =]宁 CentOS 7.

我认为这个问题与 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(SocketTransportService.java:212)
    at org.eclipse.jdi.internal.connect.SocketTransportService.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

根据以下问题,答案可能与在 0.0.0.0 上将 Tomcat 配置为 运行 而不是默认设置有关:

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.S。这不是防火墙问题。

我在上面将地址更改为 0.0.0.0 的正确轨道上,但我在 server.xml 中的 Connector 上更改了它,这与调试器无关。解决方案是更改 JPDA_ADDRESS 导致我的 bin/setenv.sh 得到:

JPDA_ADDRESS="0.0.0.0:8000"

这是由于 change in Tomcat 8:

When starting Tomcat with the jpda option to enable remote debugging, Tomcat 8 listens on localhost:8000 by default. Earlier versions listened on *:8000. If required, this default can be overridden by setting the JPDA_ADDRESS environment variable in, for example, setenv.[bat|sh].