在docker中运行的热重新加载java程序

在docker中运行的热重新加载java程序,java,spring-boot,docker,Java,Spring Boot,Docker,我开发了一个java程序,应该在docker中运行。然而,当调试运行在docker中的java程序时,我遇到了很多麻烦 我在互联网上搜索,一些教程建议使用SpringDevTools之类的工具(因为我的java程序是基于SpringBoot的程序) 根据这些教程,调试是可以的,例如设置断点和变量监视,但是,当我更新代码(例如,某些类)时,这些更改不能立即反映在docker中运行的程序中,程序的行为与旧代码一样 有人能给我一些提示吗?我通过以下方法成功地做到了这一点: 在运行时将源代码装入容器

我开发了一个java程序,应该在docker中运行。然而,当调试运行在docker中的java程序时,我遇到了很多麻烦

我在互联网上搜索,一些教程建议使用SpringDevTools之类的工具(因为我的java程序是基于SpringBoot的程序)

根据这些教程,调试是可以的,例如设置断点和变量监视,但是,当我更新代码(例如,某些类)时,这些更改不能立即反映在docker中运行的程序中,程序的行为与旧代码一样


有人能给我一些提示吗?

我通过以下方法成功地做到了这一点:

  • 在运行时将源代码装入容器
  • 使用远程调试器连接
  • 这是我的dockerfile:

    FROM gradle:5.4-jdk12
    WORKDIR /app
    EXPOSE 8080 5005
    
    这是我的docker-compose.yml:

    version: '3'
    services:
      app:
        build:
          context: .
        ports:
          - 5005:5005
          - 8080:8080
        volumes:
          - .:/app
        command: ["gradle", "bootRun"]
    
    当我使用
    docker compose up
    运行此程序,然后连接远程调试器时,热重新加载工作正常


    我正在从Intellij连接,因此我必须重建项目,以便热重新加载工作。

    在Docker中运行时,是否有任何理由调试/更新应用程序?更好的方法是在开发结束之前,使用易于启动和修补的本地设置(如从IDE启动的设置)。调试器必须更改code@nucandrei谢谢你的回复。原因是程序与主机系统有一些交互,而且,我正在使用mac for dev,使用本地设置可能不合适。一般来说,它不是一个独立的CRUD应用程序,因此我必须首先将它放在docker中。感谢您的回复,我成功地做到了这一点,首先连接到5005端口,然后单击“运行”,然后单击“重新加载更改的类”。但这似乎只适用于有限的代码更改,例如,如果我们添加一个类,这个技巧将不起作用。