我想将调试器附加到我在 dockerized WebLogic 12c 中部署的 WAR。我使用 WebLogic 的官方镜像(这是一个 Linux 容器) 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_TOOL_OPTIONS=\"-agentlib:jdwp=transport=dt_socket,address=4002,server=y,suspend=n\"
--name weblogic store/oracle/weblogic:12.2.1.3-dev-200109
Run Code Online (Sandbox Code Playgroud)
weblogic 控制台在https://localhost:9002/console/ 上活跃起来,但是在尝试运行调试器时,我的 IDE 说:
无法打开调试器端口(本地主机:4002):java.io.IOException“握手失败 - 连接过早关闭”
我的操作系统是Windows10。我尝试了Visual Studio Code 和 IntelliJ,并得到了相同的输出。WAR 运行得很好,当我使用 portman 命中某些服务端点时,它们会做出响应。
似乎发生的是容器内的 weblogic 启动脚本尝试两次应用 Java 选项参数!请参阅下面的容器输出的相关部分:
域主页是:/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 正在初始化 WebLogic 脚本工具 (WLST) ... 欢迎使用 WebLogic Server 管理脚本外壳
[...] (在我得到的日志中进一步向下:)
使用以下行启动 WLS:/usr/java/jdk-8/bin/java -server -Djava.security.egd=file:/dev/./urandom -cp /u01/oracle/wlserver/server/lib/weblogic-launcher …