intellij使用docker来调试

北慕城南 提交于 2019-12-08 23:46:07

背景

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

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

6. 调试

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

错误

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

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

参考文献

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!