使用 intelliJ 2017.2.6 远程调试 docker+wildfly
Remote debug docker+wildfly with intelliJ 2017.2.6
所以有很多关于这个主题的帖子,但 none 其中似乎有帮助。
我在 docker 容器内的 wildfly 服务器上有一个应用程序 运行。
由于某种原因,我无法将我的远程调试器连接到它。
所以,这是一个用这个命令启动的 wildfly 11 服务器:
/opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 -c standalone.xml --debug 9999;
在我的 standalone.xml 中,我有这个:
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
控制台输出看起来很有希望:
Listening for transport dt_socket at address: 9999
我什至可以在 localhost:9990/console
上使用凭据 admin:admin 访问管理控制台
但是 IntelliJ 拒绝连接...我创建了一个远程 JBoss 服务器配置,它在服务器选项卡中指向具有管理端口 9990 的本地主机。
在 startup/connection 选项卡中,我输入了 9999 作为远程套接字端口。
docker 映像暴露了端口 9999 和 9990,docker-compose 文件按原样绑定了这些端口。
即使有了所有这些,IntelliJ 在尝试连接时也会抛出此消息:
Error running 'remote':
Unable to open debugger port (localhost:9999): java.io.IOException "handshake failed - connection prematurally closed"
其次是
Error running 'remote':
Unable to connect to the localhost:9990, reason:
com.intellij.javaee.process.common.WrappedException: java.io.IOException: java.net.ConnectException: WFLYPRT0053: Could not connect to remote+http://localhost:9990. The connection failed
我完全不知道问题可能是什么...
有趣的是,在 intelliJ 失败后,如果我使缓存无效并重新启动,wildfly 会重新打印消息说它正在侦听端口 9999
不确定这是否可以看作是一个答案,因为它解决了这个问题。
但是我解决这个问题的方法是在 intelliJ 中添加 "pure" 远程配置而不是 jboss 远程。这意味着它不会自动部署,但我对此没有意见
以防将来其他人遇到同样的问题来到这个线程,我在这里找到了这个解决方案:
https://github.com/jboss-dockerfiles/wildfly/issues/91#issuecomment-450192272
基本上,从--debug参数apparart,你还需要传递*:8787
Docker 文件:
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "--debug", "*:8787"]
docker-compose:
ports:
- "8080:8080"
- "8787:8787"
- "9990:9990"
command: /opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 --debug *:8787
我没有测试 docker-compose 解决方案,因为我的解决方案是在 dockerfile 上。
所以有很多关于这个主题的帖子,但 none 其中似乎有帮助。
我在 docker 容器内的 wildfly 服务器上有一个应用程序 运行。 由于某种原因,我无法将我的远程调试器连接到它。
所以,这是一个用这个命令启动的 wildfly 11 服务器:
/opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 -c standalone.xml --debug 9999;
在我的 standalone.xml 中,我有这个:
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
控制台输出看起来很有希望:
Listening for transport dt_socket at address: 9999
我什至可以在 localhost:9990/console
但是 IntelliJ 拒绝连接...我创建了一个远程 JBoss 服务器配置,它在服务器选项卡中指向具有管理端口 9990 的本地主机。 在 startup/connection 选项卡中,我输入了 9999 作为远程套接字端口。
docker 映像暴露了端口 9999 和 9990,docker-compose 文件按原样绑定了这些端口。
即使有了所有这些,IntelliJ 在尝试连接时也会抛出此消息:
Error running 'remote':
Unable to open debugger port (localhost:9999): java.io.IOException "handshake failed - connection prematurally closed"
其次是
Error running 'remote':
Unable to connect to the localhost:9990, reason:
com.intellij.javaee.process.common.WrappedException: java.io.IOException: java.net.ConnectException: WFLYPRT0053: Could not connect to remote+http://localhost:9990. The connection failed
我完全不知道问题可能是什么...
有趣的是,在 intelliJ 失败后,如果我使缓存无效并重新启动,wildfly 会重新打印消息说它正在侦听端口 9999
不确定这是否可以看作是一个答案,因为它解决了这个问题。 但是我解决这个问题的方法是在 intelliJ 中添加 "pure" 远程配置而不是 jboss 远程。这意味着它不会自动部署,但我对此没有意见
以防将来其他人遇到同样的问题来到这个线程,我在这里找到了这个解决方案: https://github.com/jboss-dockerfiles/wildfly/issues/91#issuecomment-450192272
基本上,从--debug参数apparart,你还需要传递*:8787
Docker 文件:
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "--debug", "*:8787"]
docker-compose:
ports:
- "8080:8080"
- "8787:8787"
- "9990:9990"
command: /opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 --debug *:8787
我没有测试 docker-compose 解决方案,因为我的解决方案是在 dockerfile 上。