gpt4 book ai didi

docker - 在 vagrant 和 docker 中调试 spring boot

转载 作者:行者123 更新时间:2023-12-04 19:02:49 26 4
gpt4 key购买 nike

我正在尝试为基于 docker 和 vagrant 的 spring-boot 项目设置开发环境。我正在使用在 Windows 上运行的 IntelliJ 编写代码和 vagrant,以便能够在任何系统上的 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"]

Vagrant 文件:
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。如果有人对我应该如何配置此环境以在 Debug模式下工作有任何想法,我将很乐意提供任何帮助。

如果我设法将调试器连接到我的应用程序,我还希望有一些热插拔和静态资源重新加载功能,而无需使用 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"]

和正确的 Vagrant 文件:
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 类(我还没有检查静态资源)。

关于docker - 在 vagrant 和 docker 中调试 spring boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com