使用 kotlin spring 和 docker 配置远程调试

Posted

技术标签:

【中文标题】使用 kotlin spring 和 docker 配置远程调试【英文标题】:Configure remote debug using kotlin spring and docker 【发布时间】:2020-09-08 02:36:47 【问题描述】:

您好,我在我的应用程序中配置调试时遇到问题,我使用 docker 和 kotlin 一起使用 spring boot,请按照我的配置文件:

Dockerfile

FROM  gradle:6.4-jdk14

RUN apt-get update && apt-get install -qq -y --no-install-recommends

ENV INSTALL_PATH /weblib

RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY . .

RUN gradle clean && gradle bootJar

docker-compose.yml

version: "3.8"

services:
  weblibdb:
    image: "postgres:12.3"
    environment:
      - POSTGRES_DB=weblib
      - POSTGRES_USERNAME=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres:/var/lib/postgresql/data
  weblibapi:
    build: .
    command: bash start.sh
    ports:
      - "8090:8090"
      - "5005:5005"
    environment:
      - POSTGRES_USERNAME=postgres
      - POSTGRES_PASSWORD=postgres
      - GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=*:5005
    volumes:
      - .:/weblib
    depends_on:
      - weblibdb

volumes:
  postgres:

start.sh

gradle bootRun

我的容器工作正常,在 IDE 中创建的远程调试与容器连接但断点不起作用,请按照我的配置:

谢谢

【问题讨论】:

【参考方案1】:

我更改了我的配置和工作,按照我的更改:

从 Dockerfile 中删除以下命令:

RUN gradle clean && gradle bootJar

将我的 start.sh 更改为:

gradle clean
gradle bootJar
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 build/libs/weblib.jar

我是一个 docker-compose.yml,我在环境 GRADLE_OPTS 中将 suspend=y 更改为 suspend=n,但它是可选的。

【讨论】:

以上是关于使用 kotlin spring 和 docker 配置远程调试的主要内容,如果未能解决你的问题,请参考以下文章

sh Git + Java + Spring Boot + Kotlin + Python + Node.js + Docker + Docker的安装脚本构建开发环境。

Spring Boot 2 和 Kotlin(使用 Maven)

如何使用 Kotlin、Gradle 和 Web 框架设置 Spring Loaded?

MapStruct 不使用 Kotlin 和 Spring Boot 自动装配,使用 Gradle 构建

kotlin spring @value 注解

如何在 Spring Boot 和 Spring WebFlux 中使用“功能 bean 定义 Kotlin DSL”?