远程调试 Spring 引导应用程序
Remote debug Spring Boot application
我在 Spring 引导中有一个简单的(docker 化的)Web 应用程序。
App 编译正确。
容器构建良好,没有错误。
该应用程序 运行 在 localhost:8080 上运行良好,它很简单 "Hello World"。
现在我正在尝试将 Spring Tool Suite 调试器附加到具有远程调试功能的容器化 JVM,但没有成功。
故障信息为
Failed to connect to remote VM com.sun.jdi.connect.spi.ClosedConnectionException
这是我的 Dockerfile:
FROM openjdk:8-alpine
WORKDIR /
EXPOSE 8080 8000
COPY target /
那是我的 docker-compose.yml
version: '3.7'
services:
web:
build: .
ports:
- "8080:8080"
- "8000:8000"
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:8000 -jar gs-spring-boot-docker-0.1.0.jar
在 Spring Tool Suite 中,我有这些远程调试设置:
Remote Java Application
- Connection type: Standard (Socket attach)
- Host: localhost
- port: 8000
我正在使用装有 OSX Mojave (10.14.6) 的 Macbook Pro
感谢您的任何建议。
tl;博士:
不正确的部分是address=127.0.0.1:8000
应该是0.0.0.0:8000
docker 中的完整命令撰写:
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8000 -jar gs-spring-boot-docker-0.1.0.jar
长答案:
每个容器都有自己的网络接口,记住这一点 127.0.0.1
表示环回接口,并且只能从同一主机访问(即,如果您在容器内,则可以访问它)。
相比之下,如果您希望应用程序监听每个可用的网络接口,我们可以将其与 0.0.0.0
交换,这在我们的例子中是我们想要的,因为我们从容器外部连接到容器内的调试端口为 8000,因此环回接口不足。
我在 Spring 引导中有一个简单的(docker 化的)Web 应用程序。
App 编译正确。 容器构建良好,没有错误。 该应用程序 运行 在 localhost:8080 上运行良好,它很简单 "Hello World"。
现在我正在尝试将 Spring Tool Suite 调试器附加到具有远程调试功能的容器化 JVM,但没有成功。
故障信息为
Failed to connect to remote VM com.sun.jdi.connect.spi.ClosedConnectionException
这是我的 Dockerfile:
FROM openjdk:8-alpine
WORKDIR /
EXPOSE 8080 8000
COPY target /
那是我的 docker-compose.yml
version: '3.7'
services:
web:
build: .
ports:
- "8080:8080"
- "8000:8000"
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:8000 -jar gs-spring-boot-docker-0.1.0.jar
在 Spring Tool Suite 中,我有这些远程调试设置:
Remote Java Application
- Connection type: Standard (Socket attach)
- Host: localhost
- port: 8000
我正在使用装有 OSX Mojave (10.14.6) 的 Macbook Pro 感谢您的任何建议。
tl;博士:
不正确的部分是address=127.0.0.1:8000
应该是0.0.0.0:8000
docker 中的完整命令撰写:
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8000 -jar gs-spring-boot-docker-0.1.0.jar
长答案:
每个容器都有自己的网络接口,记住这一点 127.0.0.1
表示环回接口,并且只能从同一主机访问(即,如果您在容器内,则可以访问它)。
相比之下,如果您希望应用程序监听每个可用的网络接口,我们可以将其与 0.0.0.0
交换,这在我们的例子中是我们想要的,因为我们从容器外部连接到容器内的调试端口为 8000,因此环回接口不足。