部署在k8s或者docker中的java程序如何通过IDEA进行调试

一、暴露调试端口

代码在通过dockerfile进行镜像打包时需要在dockerfile中定义好要暴露的调试端口
部署在k8s或者docker中的java程序如何通过IDEA进行调试_第1张图片

EXPOSE 5005
ENTRYPOINT ["java","-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","/demojenkins.jar"]

二、docker或者k8s中启动容器

1、docker

docker run -d -p 5005:5005 -p 8111:8111 java-demo-01:latest -t

部署在k8s或者docker中的java程序如何通过IDEA进行调试_第2张图片
注意: 如果通过docker命令在启动容器的时候没有在命令中暴露5005端口,只是dockerfile中定义暴露了5005端口,那么查看容器状态PORTS将会呈如下显示
部署在k8s或者docker中的java程序如何通过IDEA进行调试_第3张图片
这种只能说明对于Linux宿主机而言,容器的5005端口暴露出来了,Linux宿主机是能连上的,但是对于外部机器而言这个端口是无法访问的。所以在使用docker命令启动容器时一定要将5005端口暴露给外部机器

2、k8s

对于k8s而言则需要使用NodePort方式将5005端口暴露给外部机器

kubectl expose deployment javademo1 -n ceshi --name=debug --port=5005 --target-port=5005 --type=NodePort

也可以采用在kuboard图形化界面上修改容器信息,增加暴露端口
部署在k8s或者docker中的java程序如何通过IDEA进行调试_第4张图片
暴露后查看service会查到相应的NodePort形式的端口
部署在k8s或者docker中的java程序如何通过IDEA进行调试_第5张图片

三、远程调试

通过IDEA连接暴露出来的调试端口进行远程调试

1、配置远程调试

部署在k8s或者docker中的java程序如何通过IDEA进行调试_第6张图片
配置好之后,在代码上打上断点,切换到remote配置,点击debug按钮开始调试
部署在k8s或者docker中的java程序如何通过IDEA进行调试_第7张图片
出现“已连接到目标 VM, 地址: ‘‘10.10.10.41:31096’,传输: ‘套接字’’”字样,表示IDEA已经连接到远程JVM调试端口,可以触发代码进行调试了
当代码触发后,会停在打上断点的地方,可以进行逐步调试,查看变量等操作

你可能感兴趣的:(java,intellij-idea,docker)