intellij使用docker来调试

背景

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

环境配置

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

执行步骤

1. 确认安装docker插件

默认是安装,查看方式 设置-插件-查询docker intergration关键字
intellij使用docker来调试_第1张图片

2. 配置docker信息

通过设置-编译-docker配置,创建一个“docker mac“运行器,选择docker deamon是本机的docker for mac,然后会看到底下显示着”connection successful“
intellij使用docker来调试_第2张图片

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,这个是调试端口
intellij使用docker来调试_第3张图片

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

6. 调试

  1. 设置好断点
  2. 启动调试
    intellij使用docker来调试_第4张图片

错误

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

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

参考文献

  • Debug a Java application using a Dockerfile

你可能感兴趣的:(Java)