在vagrant和docker中调试spring引导

在vagrant和docker中调试spring引导,docker,spring-boot,vagrant,remote-debugging,Docker,Spring Boot,Vagrant,Remote Debugging,我正在尝试为基于docker和vagrant的SpringBoot项目设置开发环境。我使用运行在windows上的IntelliJ编写代码,使用vagrant在任何系统上的docker容器中运行项目。我正在和maven建立一个项目。目前,我能够通过vagrant在virtualbox上运行运行在ubuntu中的docker容器中的jar中打包的应用程序。我不知道如何在IntelliJ中调试我的应用程序,我在远程调试打开的情况下启动应用程序,正确(或者至少我认为我做得对)配置端口转发,但Intel

我正在尝试为基于docker和vagrant的SpringBoot项目设置开发环境。我使用运行在windows上的IntelliJ编写代码,使用vagrant在任何系统上的docker容器中运行项目。我正在和maven建立一个项目。目前,我能够通过vagrant在virtualbox上运行运行在ubuntu中的docker容器中的jar中打包的应用程序。我不知道如何在IntelliJ中调试我的应用程序,我在远程调试打开的情况下启动应用程序,正确(或者至少我认为我做得对)配置端口转发,但IntelliJ仍然告诉我“连接重置”,并且无法连接到调试器

这是我的Dockerfile:

FROM java:8
VOLUME /tmp
ADD test-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n,address=8000", "-jar", "/app.jar"]
流浪汉档案:

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'

Vagrant.configure("2") do |config|
  config.vm.define "app" do |a|
    a.vm.provider "docker" do |d|
      d.vagrant_machine = "dockerhost"
      d.vagrant_vagrantfile = "./Vagrant_docker_wrapper"
      d.build_dir = "."
      d.build_args = ["-t=app"]
      d.ports = ["8080:8080", "8000:8000"]

      d.name = "app"
      d.remains_running = true
      d.has_ssh = true
      d.cmd = ["run"]
    end
  end
end
和流浪的码头工人:

Vagrant.configure("2") do |config|

  config.vm.provision "docker"

  config.vm.provision "shell", inline: "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"

  config.vm.define "dockerhost"
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 8080, host: 9080
  config.vm.network "forwarded_port", guest: 8000, host: 9081

  config.vm.provider :virtualbox do |vb|
      vb.name = "dockerhost"
  end

end
我在和的帮助下创建了此文件

在IntelliJ中,我添加了新的远程调试配置,并将端口设置为9081。如果任何人有任何想法,我应该如何配置这个环境在调试模式下工作,我将很高兴得到任何帮助


如果我设法将调试器连接到我的应用程序,我还希望有一些热插拔和静态资源重新加载功能,而无需使用maven重新编译并重新启动docker。因此,在这方面的任何帮助都将是非常好的,但这不是必须的。

好的,我发现了我的错误,在vagrant文件中,我只从docker容器中暴露了8080端口。我还有两个选项——Xdebug-Xrunjdwp,在docker入口点中定义为单个选项。正确的Docker文件如下所示:

FROM java:8
VOLUME /tmp
ADD simple-test-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Xdebug", "-Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n", "-jar", "/app.jar"]
和正确的流浪者档案:

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'

Vagrant.configure("2") do |config|
  config.vm.define "app" do |a|
    a.vm.provider "docker" do |d|
      d.vagrant_machine = "dockerhost"
      d.vagrant_vagrantfile = "./Vagrant_docker_wrapper"
      d.build_dir = "."
      d.build_args = ["-t=app"]
      d.ports = ["8080:8080", "8000:8000"]
      d.name = "app"
      d.remains_running = true
      d.cmd = ["run"]
    end
  end
end

另外,当我现在通过调试器连接到服务器时,我可以毫无问题地热交换java类(我还没有检查静态资源).

我正在做几乎相同的事情,但我在我的vagrant配置中使用了修复IP,这样我就可以从IntelliJ在主机中输入IP,并且工作正常。我在vagrant_docker_包装中修复了IP,如下所示:config.vm.network“private_network”,IP:“192.168.50.4”,但它没有做到这一点。IntelliJ仍在给我“连接被拒绝:连接”。在localhost和192.168.50.4上,您是否能够检查静态资源交换?不幸的是,对于重新加载静态资源,我仍然需要重新部署应用程序。您是否在intellij中获得控制台日志?