2015-10-30 80 views
5

我正在尝试为基于docker和vagrant的spring-boot项目设置开发环境。我使用在Windows上运行的IntelliJ来编写代码,并且可以在任何系统上的Docker容器中运行项目。我正在用maven构建项目。目前,我能够运行在jar包中运行的应用程序,通过vagrant在虚拟机上运行在ubuntu上的docker容器中。我无法弄清楚如何在IntelliJ中调试我的应用程序,我开始使用远程调试的应用程序,正确地(或者至少我认为我是正确的)配置端口转发,但IntelliJ仍然告诉我“连接重置”,不能连接到调试器。在vagrant和docker中调试spring引导

这里是我的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 

而且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 

我创建的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.如果有人有任何想法,我应该如何配置此环境以在调试模式下工作,我将很乐意提供任何帮助。

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

+0

我在做几乎相同的事情,但我在我的vagrant配置中使用修复IP,因此我可以从IntelliJ输入IP到主机,它工作正常 –

+0

我修复了Vagrant_docker_wrapper中的ip,如下所示:config.vm。网络“private_network”,IP:“192.168.50.4”,但它并没有办法。 IntelliJ仍然让我“拒绝连接:连接”。在本地主机和192.168.50.4 – gandalfml

回答

5

好的,我发现我的错误,在流浪文件中我只有端口8080暴露在码头集装箱。我还有两个选项-Xdebug -Xrunjdwp在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类没有问题(我没有检查静态资源)。

+0

你能够检查静态资源交换? – Charith

+0

不幸的是,重新加载静态资源,我仍然需要重新部署应用程序 – gandalfml

+0

你是否在控制台登录intellij? –