项目在idea开发,直接打包上传启动服务
在本地192.168.0.12开发 部署到192.168.0.110上

idea remote jvm debug
command line arguments for remote JVM:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
我自己电脑运行idea 在 192.168.0.12 ,host:192.168.0.110 port 5005

一、确保网络互通和idea代码和远程服务器代码一致

你的电脑 (开发机)         防火墙/网络             目标服务器
192.168.0.12:5005  ←--- 网络互通 ---→  192.168.0.110:5005
 IDEA 调试客户端                         JVM 调试服务端

二、参数解析

在这里插入图片描述

三、验证服务器端调试端口

# 在 192.168.0.110 服务器上检查
# 1. 查看JVM进程是否启动
ps aux | grep java
# 或
jps -l

# 2. 检查5005端口是否监听
netstat -tlnp | grep 5005
# 输出示例:tcp6  0  0 :::5005  :::*  LISTEN  12345/java

# 3. 测试端口连通性(从服务器自身)
telnet 127.0.0.1 5005
# 或
nc -zv 127.0.0.1 5005

# 4. 查看防火墙规则
sudo firewall-cmd --list-ports        # CentOS/RHEL
sudo ufw status                      # Ubuntu
# 或者临时关闭防火墙测试
sudo systemctl stop firewalld        # CentOS

四、docker部署远程监听

本地配置
remote jvm debug host:10.168.9.22 端口是5003
debugger mode:attach to remote JVM
transport:socket
command line arguments for remote jvm
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5003

远程docker配置
docker-compose.yml

kms-admin-dev:
    container_name: kms-admin-dev
    image: kms/kms-admin:${KMS_VERSION:-latest}
    build:
      context: ./kms-admin
      dockerfile: dockerfile
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - DB_PASSWORD=${MYSQL_ROOT_PASSWORD:-123456}
      - JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5002
    privileged: true
    pid: host
    devices:
    - /dev/ttyAMA1:/dev/ttyAMA1
    volumes:
      - ./cert:/dataVolume/kms/cert
      - ./kms-admin/dataVolume/kms:/dataVolume/kms
      - ./kms-admin/temp:/dataVolume/temp
      - ./kms-admin/log:/usr/local/skms/logs
      - ./kms-admin/lib/libsgd.so:/usr/lib/libsgd.so
      - ./kms-admin/lib/libsgd.so:/usr/lib64/libsgd.so
      - ./kms-admin/lib/libQRNG.so:/usr/lib/libQRNG.so
      - ./kms-admin/lib/libQRNG.so:/usr/lib64/libQRNG.so
      - ./kms-admin/lib/libbusiness.so:/usr/lib/libbusiness.so
      - ./kms-admin/lib/libbusiness.so:/usr/lib64/libbusiness.so
      - ./kms-admin/lib/libplatform.so:/usr/lib/libplatform.so
      - ./kms-admin/lib/libplatform.so:/usr/lib64/libplatform.so
      - ./kms-admin/lib/libsdf_api.conf:/etc/libsdf_api/libsdf_api.conf
      - ./kms-admin/jar/skms-admin.jar:/dataVolume/kms/skms-admin.jar # 测试用于经常更新jar包的情况
      - ./kms-admin/jar/application.yml:/dataVolume/kms/application.yml # 测试用于经常更新application.yml的情况
      - /etc/sysconfig/network-scripts:/etc/sysconfig/network-scripts
      - /usr/sbin/ifconfig:/usr/sbin/ifconfig
      - /usr/bin/cd:/usr/bin/cd
      - /usr/local/bin/docker-compose:/usr/bin/docker-compose
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - ./:/usr/kms
      - /dev:/dev
    ports:
      - 0.0.0.0:9087:9088
      - 0.0.0.0:5002:5002
    depends_on:
      - kms-mysql-dev
      - kms-redis-dev
    links:
      - kms-mysql-dev
      - kms-redis-dev
    restart: always

远程监听端口是:5002
在你的 docker-compose.yml 中,ports 配置是这样的:

ports:
  - 0.0.0.0:9087:9088      # 应用端口
  - 0.0.0.0:5002:5002      # 调试端口

这行配置的意思是:将容器内的 5002 端口,映射到宿主机的 5002 端口。
JVM 调试参数是通过 JAVA_TOOL_OPTIONS 设置的

environment:
  - JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5002

这行配置的意思是:告诉 JVM 在容器内部监听 5002 端口(0.0.0.0:5002 表示监听容器内所有网络接口的 5002 端口)。

所以,完整的连接链路是:
你的本地 IDE (10.168.9.22:5002) → 宿主机端口 5002 → 容器内端口 5002 → 容器内的 JVM 调试服务。

远程的 java_tool_options 和本地command line arguments for remote jvm 有啥关系
在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐