Как отлаживать тесты maven surefire, запущенные в контейнере docker? - PullRequest
0 голосов
/ 22 января 2020

У меня есть проект maven, который содержит интеграционные тесты, и я использую плагин surefire. Я могу запустить тесты с

mvn clean package

, и это прекрасно работает. Я также могу удаленно отлаживать интеграционные тесты, используя intellij. Для этого я выполняю

mvn clean package -Dmaven.surefire.debug

и в Intellij создаю конфигурацию запуска / отладки типа «Удаленный», устанавливая Host для localhost и Port на 5005. Как только консоль печатает

Listening for transport dt_socket at address: 5005

Запускаю удаленную отладку в intellij и все отлично работает.

Дело в том, что я хочу выполнить интеграционные тесты внутри контейнера docker и особенно отладить их внутри контейнера. Я создал docker изображение с java, maven и всем остальным, что нужно моему приложению. В Entrypoint я запускаю свое приложение и затем запускаю интеграционные тесты с

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"

Но порт должен быть открыт, потому что на хосте выполняется

nc -zv localhost 5005

( netcat) приводит к

Connection to localhost 5005 port [tcp/*] succeeded!

Но если выполнить ту же команду netcat внутри контейнера docker, это приводит к

localhost [...] 5005 (?) : Connection refused

Может кто-нибудь сказать мне, что я делаю неправильно? Я не настаиваю на отладке с помощью intellij, но возможность отладки тестов внутри контейнера docker была бы удивительной.

1 Ответ

0 голосов
/ 23 января 2020

Ответ на самом деле можно найти здесь: Удаленная отладка Java 9 в docker контейнере из IntelliJ IDEA

В моем случае это означает, что выполнение тестов с

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

решает проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...