Невозможно настроить Debug для работы на Java через Dockerized WebLogi c, без IntelliJ и Studio Code. - PullRequest
3 голосов
/ 27 апреля 2020

Я хочу подключить отладчик к моим развернутым WAR-файлам в моем доклеризованном WebLogi c 12 c. Я использую это официальное изображение WebLogic https://hub.docker.com/_/oracle-weblogic-server-12c и запускаю контейнер с помощью команды docker:

docker run -d -p 4002:4002 -p 9002:9002 
-v c:/my-path-to-shared-volume:/u01/oracle/properties 
-e ADMINISTRATION_PORT_ENABLED=true -e DOMAIN_NAME=docker_domain 
-e JAVA_OPTS=\"-agentlib:jdwp=transport=dt_socket,address=4002,server=y,suspend=n\" 
--name weblogic store/oracle/weblogic:12.2.1.3-dev-200109

Консоль weblogi c оживает при https://localhost: 9002 / console / но при попытке запустить отладчик моя IDE говорит:

Невозможно открыть порт отладчика (localhost: 4002): java .io.IOException "handshake не удалось - соединение преждевременно закрыто "

Я попытался с Visual Studio Code и IntelliJ, и получил тот же вывод. WAR'ы работают нормально, и они отвечают, когда я использую portman для достижения некоторых конечных точек службы.

UPDATE после предложений Варгана.

Я выполнил команду docker без команды -d (отсоединить) параметр, чтобы я мог читать журнал ответа контейнера в режиме реального времени. Параметр JAVA_OPTS просто игнорировали. Поэтому я изменил параметр на JAVA_TOOL_OPTIONS. Похоже, что сценарии запуска weblogi c внутри контейнера пытаются применить параметр Java Options дважды! См. Относительные части вывода контейнера ниже:

Домен домена: / u01 / oracle / user_projects / domains / docker_domain Взял JAVA_TOOL_OPTIONS : "-agentlib: jdwp = transport = dt_socket, address = localhost: 4002, server = y, suspend = n " Прослушивание транспорта dt_socket по адресу: 4002 Инициализация WebLogi c Инструмент сценариев (WLST) ... Добро пожаловать в WebLogi c Оболочка сценариев администрирования сервера

[...]

Запуск WLS со строкой: / usr / java / jdk-8 / bin / java -server -D java .security.egd = file: / dev /./ urandom -cp /u01/oracle/wlserver/server/lib/weblogic-launcher.jar -Dlaunch.use.env.classpath = true -Dweblogi c .Name = AdminServer -D java .security.policy = / u01 / oracle / wlserver / server / lib / weblogi c .policy -D java .system.class.loader = com. oracle .classloader.weblogi c .LaunchClassLoader -javaagent: /u01/oracle/wlserver/server/lib/debugpatch-agent.jar -da -Dwls.home = / u01 / oracle / wlserver / server -Dweblogi c .hom e = / u01 / oracle / wlserver / server weblogi c .Server Подобраны JAVA_TOOL_OPTIONS:"-agentlib: jdwp = transport = dt_socket, address = localhost: 4002, server = y, suspend = n" ОШИБКА: ошибка транспорта 202: сбой привязки: адрес уже используется ОШИБКА: не удалось инициализировать транспортный dt_socket JDWP, ошибка завершения JDWP TRANSPORT_INIT (510) AGENT_ERROR_TRANSPORT_INIT (197): инициализированные транспорты [debugInit. c: 750] Остановка сервера Derby ... Сервер Derby остановлен.

Ответы [ 3 ]

1 голос
/ 05 мая 2020

JAVA_OPTS - это указанная в Tomcat переменная среды c

В Java 8 JDK поддерживает переменную среды JAVA_TOOL_OPTIONS, что позволяет включить отладчик. Попробуйте заменить JAVA_OPTS на JAVA_TOOL_OPTIONS

Вы также должны настроить адрес следующим образом: address=*:8000, address=localhost:4002 или address=0.0.0.0:4002

1 голос
/ 30 апреля 2020

Попробуйте добавить address=*:4002 вместо address=4002

0 голосов
/ 03 мая 2020

Вы пытались использовать вместо этого номер порта + 3 (4005)? Это обычная практика иметь отдельный порт отладки для контейнерных приложений

...