2015-10-30 56 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? –