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博客