У меня есть проект 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 была бы удивительной.