调试春天开机在流氓和码头 [英] debug spring boot in vagrant and docker

查看:154
本文介绍了调试春天开机在流氓和码头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在设计基于docker和vagrant的spring-boot项目的开发环境。我正在使用在Windows上运行的IntelliJ来编写代码和流氓程序,以便能够在任何系统上的docker容器中运行项目。我正在用maven建立项目。目前,我可以通过vagrant在虚拟机上运行在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]
pre>

Vagrantfile:

  ENV ['VAGRANT_DEFAULT_PROVIDER'] =' docker'

Vagrant.configure(2)do | config |
config.vm.defineappdo | a |
a.vm.providerdockerdo | 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_docker_wrapper:

  Vagrant.configure(2)do | config | 

config.vm.provisiondocker

config.vm.provisionshell,inline:ps aux | grep'sshd:'| awk'{print $ 2 $'

config.vm.definedockerhost
config.vm.box =ubuntu / trusty64
config.vm.networkforwarding_port guest:8080,host:9080
config.vm.networkforwarding_port,guest:8000,host:9081

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

end

我在 http://blog.zenika.com/2014/10/07/Setting-up-a-development-environment-using-Docker-and-Vagrant/ https://spring.io/guides/gs/spring-boot-docker/



在IntelliJ中,我添加了新的远程调试配置并将端口设置为9081.如果任何人有任何想法,我应该如何配置此环境工作在调试模式我将很乐意为任何帮助



如果我设法将调试器连接到我的应用程序,我还想要一些热插拔和静态资源重新加载功能,而不需要重新编译maven并重新启动docker。所以在这方面的任何帮助也将是巨大的,但不一定要有。

解决方案

好的,我发现我的错误在流氓文件中,我只有港口8080露天从码头集装箱。我还有两个选项-Xdebug -Xrunjdwp定义为docker entrypoint中的单个选项。正确的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]



&p&正确的流氓文件:

  ENV ['VAGRANT_DEFAULT_PROVIDER'] ='docker'

Vagrant.configure(2)do | config |
config.vm.defineappdo | a |
a.vm.providerdockerdo | 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类没有问题(我还没有检查静态资源)。 >

I'm trying to setup development environment for spring-boot project based on docker and vagrant. I'm using IntelliJ running on windows to write code and vagrant to be able to run project in docker containers on any system. I'm building project with maven. Currently I'm able to run application packaged in jar in docker container running in ubuntu on virtualbox via vagrant. I cannot figure it out how to debug my application in IntelliJ, I start application with remote debugging on, correctly (or at least I think I'm doing it right) configure port forwarding, but IntelliJ still tells me "Connection reset" and cannot connect to debugger.

Here is my 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"]

Vagrantfile:

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

And Vagrant_docker_wrapper:

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

I created this files with help of http://blog.zenika.com/2014/10/07/Setting-up-a-development-environment-using-Docker-and-Vagrant/ and https://spring.io/guides/gs/spring-boot-docker/

In IntelliJ I added new remote debug configuration and set port to 9081. If anyone has any ideas how I should configure this environment to work in debug mode I will be glad for any help.

If I manage to connect with debugger to my app, I also want to have some hot swap and static resources reload functionallity without need to recompile with maven and restart docker. So any help in this area also will be great but it isn't must to have.

解决方案

Ok, I found my error, in vagrant file I has only port 8080 exposed from docker container. I has also two options -Xdebug -Xrunjdwp defined as single option in docker entrypoint. Correct Docker file looks like this:

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"]

And correct vagrant file:

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

Also, when I'm now connected via debugger to the server, I can hot swap java classes without problems (I didn't check static resources yet).

这篇关于调试春天开机在流氓和码头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆