在 IntelliJ IDEA 的 Docker 容器中远程调试 Java 9

我有一个包含此内容的 Dockerfile:

FROM openjdk:9

WORKDIR /project

ADD . /project

EXPOSE 5005

我的 docker-compose.yml 看起来像这样:

version: "3.2"
services:
  some-project:
    build: .
    ports:
      - target: 5005
        published: 5005
        protocol: tcp
        mode: host
  command: "java '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005' SomeClass"

当我做 docker-composer 时,我看到一条消息“正在侦听传输dt_socket地址:5005”。但是当我尝试与jdb或Idea连接时,我得到“java.io.IOException:握手失败 - 连接预先关闭”。

如果我将 openjdk:9 更改为 openjdk:8,一切正常。但是,我的项目需要Java 9。


答案 1

从 Java 9 开始,JDWP 套接字连接器缺省情况下只接受本地连接。请参见:http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435

因此,要从外部启用调试连接,请指定为地址:*:<port>

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005


答案 2