我正在嘗試在測驗環境中除錯我的應用程式,我的應用程式在 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:5005pod(例如,pod 實體名稱是 my-pod-c93b8b6df-8c4aa) .
這將打開從本地計算機到 pod 的連接。然后你需要通過kubectl describe pods my-pod-c93b8b6df-8c4aaIntelliJ 識別 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418347.html
標籤:
