docker中tomcat實現遠程調試配置
由於部署環境的差異性,相信很多朋友都碰到過開發環境正常測試過的功能在測試環境甚至生產環境下出現bug的情況。一般情況下,生產環境可以采取的手段比較單一,即通過日志的方式獲取運行中的環境上下文,分析日志文件並嘗試重現bug。這會帶來的問題還是不少的,首先,日志的分析是一項比較耗時的工作;其次,現有的日志記錄不一定能反映出問題,你可能需要多次重復這個過程(分析日志->猜測問題->加日志->部署->獲取日志)來慢慢逼近問題。倘若是測試環境,我們還多了一項可供選擇的手段——遠程調試——將程序在測試環境中以debug模式啟動,在本機使用IDEA在工程中設置斷點進行調試。
配置docker-compose.yml
CATALINA_OPTS參數配置啟動遠程調試功能
version: '2.2'
services:
test:
container_name: test
image: tomcat:8.5.32
ports:
- "5005:5005"
volumes:
- "./target/test:/usr/local/tomcat/webapps/ROOT"
environment:
# tomcat啟動遠程調試
CATALINA_OPTS: "-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,suspend=n,server=y"
command: ["catalina.sh", "run"]
- JPDA參數配置啟動遠程調試功能
version: "3"
services:
tomcat:
image: tomcat:8.5.27
ports:
- "8080:8080"
- "5005:5005"
volumes:
- ./www:/www:rw
- ./conf/server.xml:/usr/local/tomcat/conf/server.xml:ro
environment:
JPDA_ADDRESS: 5005
JPDA_TRANSPORT: dt_socket
command: ["catalina.sh", "jpda", "run"]
networks:
- default
# 需要nginx、mysql、redis、activemq配置都可以在這里加上
networks:
default:
docker中spring boot實現遠程調制配置
首先,我們要讓要讓遠程服務器支持遠程調試功能,在項目啟動項上追加特定的 JVM 參數即可,參數如下:
晚於 JDK 1.4.X 版本
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4001
配置docker-compose.yml
app.jar指打包后的spring boot包
version: '2.2'
services:
test:
container_name: test
ports:
- "8080:8080"
- "5005:5005"
CMD ["java","-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-Dspring.profiles.active=sit","app.jar"]
配置IDEA
打開配置窗口
點擊左上角+號,找到remote,配置服務部署的服務地址,如果是本地測試配置localhost,配置上文配置中指定的端口
選擇啟動,即可調試遠程項目