我正在尝试在测验环境中除错我的应用程序,我的应用程序在 pod 中运行,我说 'pod' 因为我对Kubernetes不熟悉,它的管理客户端看起来像这样:应用程序运行示意图。我已经知道我应该像这样设定想法 RUN/Debug Configurations 示意图。并且应该重新启动并重新部署我的应用程序,我首先更改了 Dockfile。原始指令是FROM xxx/java:alpine VOLUME /tmp ADD recruitment.jar app.jar ENTRYPOINT ["java","-Xmx2048m","-jar","/app.jar"]
,我将其更改为,FROM xxx/java:alpine VOLUME /tmp ADD recruitment.jar app.jar ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-jar","/app.jar"]
但它总是显示这样的错误Error running 'face_remote': Unable to open debugger port (888.88.888.888[not real]:5005): java.io.IOException "handshake timeout"
。我不确定这个 ip,因为我使用 'ping 888.88.888.888' 指令不能成功。我使用这个 ip 因为 Swagger 请求 url 的域名的 ip 是 this.this main enter image description here. 我猜如果应用程序在 docker 或 k8s 中运行,它会有不同的互动模式。不像只是在linux中运行
uj5u.com热心网友回复:
大部分附加影像不可见。
- IP 地址应该可以从您的本地系统 [888.88.888.888] 访问,请注意确保这是正确的。
- 除错埠也需要从本地系统映射 - 使用埠转发 ex:kubectl port-forward 5005:5005
如果您已配置埠转发,则可以使用 localhost:5005 进行除错
uj5u.com热心网友回复:
我看到你可以检查三件事:
检查 IP 地址: jar 档案在 Docker 容器中运行,该容器在 pod 中运行。要访问 pod,您通常需要通过服务和入口。您使用的 ip 很可能会到达入口/服务或任何其他更高层。
要附加远程除错器,您需要直接连接到 PodIP。这样做的一种方法是首先使用工具kubectl连接到您的 kubernetes 集群(需要一些配置)并从您的 pod 进行埠转发:kubectl port-forward my-pod-c93b8b6df-8c4aa 5005:5005
pod(例如,pod 实体名称是 my-pod-c93b8b6df-8c4aa) .
这将打开从本地计算机到 pod 的连接。然后你需要通过kubectl describe pods my-pod-c93b8b6df-8c4aa
IntelliJ 识别 PodIP 并使用它
检查埠是否暴露:
确保5005
在测验环境中从 pod 暴露埠(类似于在本地运行容器时暴露埠)。
如何做到这一点取决于您如何运行 Kubernetes 集群。如果你使用 Helm chart,你可以在部署 yaml 的 port 部分添加这样的配置:
- containerPort: 5005
name: debug
protocol: TCP
检查除错命令地址:
最后一件事是确保在命令列选项中添加正确的地址。正如 IntelliJ 在除错编辑器中建议的那样:用于 JDK9 …suspend=n,address=*:5005
和 JDK8 及以下使用…suspend=n,address=5005
0 评论