intellij使用docker来调试

  • Post author:
  • Post category:其他




背景

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文件,并输入如下内容

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,这个是调试端口

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. 端口已经占用

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



参考文献



版权声明:本文为razorluo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。