Я пытаюсь подключить eclipse к контейнеру докеров, который у меня запущен, но у меня возникают проблемы.
Моя команда запуска докера выглядит следующим образом:
docker run --rm -it -p 8000:8000 -p=8668:8080 -p 8010:8009 -p 8443:8443 \
--name myContainer -h theContainer -e JVM_ROUTE=myContainer1 myContainer:qa
В eclipse я подключаюсь к localhost в качестве хоста и 8000 в качестве порта. Я перехожу в Run-> Debug Configurations-> Remote Java Application, и я создал новую конфигурацию отладки.
Когда я нажимаю "Применить", а затем "Отладка", я получаю всплывающее сообщение об ошибке Failed to connect to remote VM..
Что еще мне нужно сделать, чтобы удаленная отладка работала правильно?




Java-приложение, работающее в контейнере докеров, можно удаленно отлаживать с помощью
Включение JDWP для java-процесса в контейнере, например
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y [...]
или используя переменную среды JAVA_OPTS
JAVA_OPTS = "-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"
Обратите внимание, что suspend=y предотвратит запуск приложения до тех пор, пока к JVM не будет подключен удаленный отладчик. Если используется suspend=n, приложение запустится как обычно, позволяя удаленному отладчику подключиться позже.
Подключение к процессу, например через вашу IDE, используя порт, указанный в настройках address=<port> выше, и, что важно, IP-адрес докер хост, который, если вы не работаете в Linux, вероятно, не localhost. Если вы используете docker-machine, IP-адрес хоста докера может отображаться с помощью docker-machine ip, например
$ docker-machine ip
192.168.99.100
Я на Mac. Я попробую сейчас.
Это было решено заменой localhost моим фактическим IP-адресом.
У меня Mac, поэтому я не использую docker-machine.
что вы имеете в виду, говоря, что я не использую docker-machine, эта проблема связана с docker-machine, и вы отправляете неправильный ответ! это актуально!
ОС: Ubuntu 18 / Windows 10
Java: OpenJdk 12
Контейнер Docker: Приложение загрузки Sprint
Чтобы подключить удаленную отладку в Eclipse, вы можете выполнить следующие действия:
# For Windows Machine comment EXPOSE 7074 and add it to docker-compose.yml
EXPOSE 7074
ENV DEBUG_INFO = "-Xdebug -Xrunjdwp:transport=dt_socket,address=0.0.0.0:7074,server=y,suspend=n"
ENTRYPOINT [ "sh", "-c", "java ${DEBUG_INFO} -Dspring.profiles.active=docker -jar /pharmacy-service.jar" ]
Для Windows добавьте порты в docker-compose.yml
bank-service:
image: ....
environment:
...
ports:
- 9097:9097
- 7074:7074
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e63bb0decc92 bridge bridge local
94aefcdbb5f3 ecs-core_default bridge local
$ docker network inspect ecs-core_default
[
{
"Name": "ecs-core_default",
.....
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
.....
"Containers": {
"29bebdc31d6bf2057ed31074407c780cc718396ca49f58e766e098fceaa41a41": {
"Name": "ecs-core_pharmacy-service_1",
"EndpointID": "fadc9b40bfed1d4b2104b96fb6930bda47928256092c268aa4cb67407c2c1661",
"MacAddress": "02:42:ac:12:00:06",
"IPv4Address": "172.18.0.6/16",
"IPv6Address": ""
}
}
.....
}
]
Только для Linux: скопируйте IP-адрес из контейнеров «IPv4Address»: «172.18.0.6/16», то есть 172.18.0.6.
Только для Windows 10: чтобы найти IP, перейдите в Панель управления -> Сеть и Интернет -> Просмотр состояния сети и задачи -> Изменить настройки адаптера -> Найдите vEthernet. Откройте «Свойства», перейдите на вкладку «Сеть», выберите TCP / IPv4, затем нажмите кнопку «Свойства» и скопируйте IP.

В Eclipse, Run -> Debug Configuration, используйте IP (снимок экрана показывает IPv4 для Linux, для Windows это будет 172.26.48.1) и открытый порт (например, 7074).

Наслаждаться!!
См. Также stackoverflow.com/questions/138511/…