背景
intellij idea作为java开发常用的ide,结合当前主流的虚拟化docker发布,如何结合两者进行调试开发是一个基本使用场景
环境配置
- macOS mojave
- Docker Desktop for mac
- IntelliJ IDEA 2019.1.2 (Ultimate Edition)
执行步骤
1. 确认安装docker插件
默认是安装,查看方式 设置-插件-查询
docker intergration
关键字
2. 配置docker信息
通过设置-编译-docker配置,创建一个“docker mac“运行器,选择docker deamon是本机的docker for mac,然后会看到底下显示着”connection successful“
3. 创建一个项目spring boot
具体参考
官网介绍
4. 创建docker file
在项目目录下创建docker file,我在main/docker/创建dockerfile文件,并输入如下内容
FROM openjdk:8
VOLUME /tmp
ADD dockerci-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10002","-jar","/app.jar"]
注意这里面加入了
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10002
其中这是用于远程调试使用的,让其远程程序需要支持调试的jvm参数配置。
接着执行“左边的绿色三角形”执行,运行容器,查看到容器运行正常
5. 创建远程调试
创建运行配置项,增加remote调试,需要配置10002,这个是调试端口
- 选择remote来创建调试
- 选择端口为10002
- 选择模块是你创建的项目,这里我是dockerci
-
在启动前,选择拉起docker
保存应用
6. 调试
- 设置好断点
-
启动调试
错误
-
Error running 'remote_debug': Unable to open debugger port (localhost:10002): java.io.IOException "handshake failed - connection prematurally closed"
这是因为容器跑起来没有拉起远程调试端口10002,检查jvm拉起参数是否配置了
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10002
- 端口已经占用
检查容器是否已经启动了,或者服务跑起来,检查端口占用程序。
参考文献