intellij使用docker调试

背景

intellij idea作为java开发常用的ide,结合当前主流的虚拟化docker发布,如何结合两者进行调试开发是一个基本使用场景

环境配置

  • macOS mojave
  • Docker Desktop for mac
  • IntelliJ IDEA 2019.1.2 (Ultimate Edition)

    执行步骤

    1. 确认安装docker插件

    默认是安装,查看方式 设置-插件-查询docker intergration关键字
    pic

2. 配置docker信息

通过设置-编译-docker配置,创建一个“docker mac“运行器,选择docker deamon是本机的docker for mac,然后会看到底下显示着”connection successful“
pic

3. 创建一个项目spring boot

具体参考 官网介绍

4. 创建docker file

在项目目录下创建docker file,我在main/docker/创建dockerfile文件,并输入如下内容

1
2
3
4
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参数配置。

接着执行“左边的绿色三角形”执行会弹出对应镜像生成以及容器运行的参数配置,具体配置如下,运行容器,查看到容器运行正常
pic

  1. 选择之前设置的docker deamon
  2. 选择之前创建的dockerfile文件
  3. 选择对应dockerfile中涉及的app.jar的路径,这里根据项目配置成docker/target
  4. 配置对外暴露的端口
  5. (可选)指定镜像名,修改image tag填写

5. 创建远程调试

创建运行配置项,增加remote调试,需要配置10002,这个是调试端口
pic

  1. 选择remote来创建调试
  2. 选择端口为10002
  3. 选择模块是你创建的项目,这里我是dockerci
  4. 在启动前,选择拉起docker
    保存应用

6. 调试

  1. 设置好断点
  2. 启动调试
    pic

错误

  1. 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

  1. 端口已经占用

检查容器是否已经启动了,或者服务跑起来,检查端口占用程序。

相关文章

参考文献

原创技术分享,您的支持将鼓励我继续创作