调试春天开机在流氓和码头 [英] debug spring boot in vagrant and docker
问题描述
我正在设计基于docker和vagrant的spring-boot项目的开发环境。我正在使用在Windows上运行的IntelliJ来编写代码和流氓程序,以便能够在任何系统上的docker容器中运行项目。我正在用maven建立项目。目前,我可以通过vagrant在虚拟机上运行在Ubuntu上运行的docker容器中的jar包。我无法弄清楚如何在IntelliJ中调试我的应用程序,我正确地启动应用程序(远程调试)(或至少我认为我正在做正确的)配置端口转发,但IntelliJ仍然告诉我连接重置,不能连接到调试器。
这是我的Dockerfile:
FROM java :8
pre>
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.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屋!