1. 修改 Java 启动命令
在 Docker 容器中启动 Java 程序时,需要添加 JVM 调试参数,jdk8以上版本
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-app.jar
jdk8及以下版本:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar your-app.jar
说明:
-
transport=dt_socket
:指定调试传输方式为套接字(Socket)。 -
server=y
:表示当前 Java 应用程序作为调试服务器,允许远程调试客户端连接。 -
suspend=n
:表示 Java 应用程序不会在启动时暂停等待调试器连接,而是直接启动运行。如果设置为suspend=y
,则程序会在启动时暂停,直到调试器连接后才会继续运行。 -
address=*:5005
:指定调试端口为5005
,*
表示允许任何 IP 地址连接到该端口(如果仅允许本地,用address=5005
)。
2. 修改 Dockerfile 或 docker-compose.yml
Dockerfile 示例:
FROM openjdk:11
COPY your-app.jar /app/
EXPOSE 5005
CMD ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-jar", "/app/your-app.jar"]
docker-compose.yml 示例:
version: '3.8'
services:my-java-app:image: openjdk:11 # 或 adoptopenjdk/openjdk11:alpineports:- "8080:8080" # 应用端口- "5005:5005" # 调试端口volumes:- ./app.jar:/app/app.jar # 挂载 jar 包command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar /app/app.jar
3. 构建并运行容器
docker build -t your-app .
docker run -p 8080:8080 -p 5005:5005 your-app
4、配置开发工具
IntelliJ IDEA
-
点击 "Run" → "Edit Configurations"
-
添加 "Remote JVM Debug" 配置
-
设置主机为
localhost
,端口为5005
-
点击调试按钮
运行-编辑配置
新增远程jvm调试
配置远程主机信息
参考文章:
Java远程调试指南-CSDN博客