背景
項目開發中需要利用 Spring Cloud Feign調用另一個微服務提供的接口,而所有微服務均部署在docker容器中,傳統Idea本地調試方法無法進行有效調用,因此需要特殊配置實現部署環境的遠程調試,該方法也適用於調試只在部署環境才能復現的故障。
步驟
遠程調試從技術上來講,就是在本機與遠程建立socket通訊,所以端口不要衝突,且本機要允許訪問遠程端口,另外,遠程應用啓動時需加開啓遠程連接並調試的參數。
1、進入容器,開啓JVM調試端口jdwp端口。即進入容器內部後輸入jcmd 1 VM.start_java_debugging;
注:第一次輸入命令報錯,切換noroot用戶後再輸入命令即可,
如上圖顯示,Adress: *5005即爲該部署應用所在容器暴露出來的端口,等會要用到。
2、使用MobaXtern建立臨時性質的調試代理
打開SSH連接軟件 MobaXterm,在左邊欄找到 Tools->MobaSSHTunnel
選擇New SSH tunnel->Local port forwarding (將本地某個端口映射到服務器內部可訪問的端口),再做如下配置
相關名稱註釋如下:
Forward Port: 本地PC端口
Remote Server: 容器宿主機可訪問到的容器IP
Remote Port: 容器端口
SSH Server: 容器宿主機IP(可能是物理機或虛擬機, 任意一臺容器化的服務器即可)
SSH Port: 容器宿主機SSH端口號 默認端口22
SSH User: 容器宿主機SSH用戶名
SSH Passowrd: 容器宿主機SSH密碼
另外,如果是密鑰方式登錄的服務器,在保存後還需選擇添加密鑰
確定後點擊start 啓動
3、IDEA配置遠程調試
打開與運行中的應用對應的源碼項目(本地代碼需與git上同步)
在Run菜單下點擊Edit Configurations,左上角點擊+號 選擇Remote 添加一個好記的名稱,
然後確定shift+F9開始調試,然後就可以在源碼中設置斷點調試了
4、調試示例界面
用postman測試該接口,可在idea看到如下界面,表示遠程連接已成功,代碼順利進入斷點: