使用端口转发在 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].
我正在尝试将我的 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].