Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试docker容器中运行的maven surefire测试?_Docker_Debugging_Intellij Idea_Integration Testing_Maven Surefire Plugin - Fatal编程技术网

如何调试docker容器中运行的maven surefire测试?

如何调试docker容器中运行的maven surefire测试?,docker,debugging,intellij-idea,integration-testing,maven-surefire-plugin,Docker,Debugging,Intellij Idea,Integration Testing,Maven Surefire Plugin,我有一个包含集成测试的maven项目,我使用surefire插件。我可以用它来运行测试 mvn clean package mvn clean package -Dmaven.surefire.debug 这很好。我还可以使用intellij远程调试集成测试。为此,我执行 mvn clean package -Dmaven.surefire.debug 在Intellij中,我创建了一个“Remote”类型的运行/调试配置,将主机设置为localhost,端口设置为5005。控制台一打印出

我有一个包含集成测试的maven项目,我使用surefire插件。我可以用它来运行测试

mvn clean package
mvn clean package -Dmaven.surefire.debug
这很好。我还可以使用intellij远程调试集成测试。为此,我执行

mvn clean package -Dmaven.surefire.debug
在Intellij中,我创建了一个“Remote”类型的运行/调试配置,将主机设置为localhost,端口设置为5005。控制台一打印出来

Listening for transport dt_socket at address: 5005
我在intellij中启动远程调试,一切正常

问题是我想在docker容器中执行集成测试,尤其是在容器中调试它们。我已经用java、maven和我的应用程序需要的所有其他东西创建了一个docker映像。在入口点,我启动我的应用程序,然后用

mvn clean package
mvn clean package -Dmaven.surefire.debug
在docker容器内。我使用选项运行docker容器

-p 5005:5005
打开该端口进行远程调试。在运行容器时,我可以看到控制台输出

Listening for transport dt_socket at address: 5005
但是,当我在intellij中启动远程调试器时,它不会连接,而是给出以下错误消息

Error running '...':
Unable to open debugger port (localhost:5005): java.net.SocketException "Connection reset"
Unable to open debugger port (localhost:5005): java.net.IOException "handshake failed - connection prematurally closed"
如果我再次尝试启动调试器,就会收到错误消息

Error running '...':
Unable to open debugger port (localhost:5005): java.net.SocketException "Connection reset"
Unable to open debugger port (localhost:5005): java.net.IOException "handshake failed - connection prematurally closed"
但是端口应该是打开的,因为正在执行

nc -zv localhost 5005
在主机中(netcat)会导致

Connection to localhost 5005 port [tcp/*] succeeded!
localhost [...] 5005 (?) : Connection refused
但如果在docker容器内执行相同的netcat命令,则会导致

Connection to localhost 5005 port [tcp/*] succeeded!
localhost [...] 5005 (?) : Connection refused

有人能告诉我我做错了什么吗?我并不坚持使用intellij进行调试,但是能够在docker容器中调试测试将是一件令人惊奇的事情。

答案实际上可以在这里找到:

在我的例子中,这意味着使用

mvn clean package -Dmaven.surefire.debug="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=*:5005"

解决了这个问题

您需要在目标主机上以调试模式启动java—这意味着在docker容器主机内。并确保可以从运行IDE的主机(启动远程调试配置的主机)访问此主机:端口。