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

Iur*_*dov 11 java debugging remote-debugging docker docker-compose

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

FROM openjdk:9

WORKDIR /project

ADD . /project

EXPOSE 5005
Run Code Online (Sandbox Code Playgroud)

我的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"
Run Code Online (Sandbox Code Playgroud)

当我做docker-composer时,我看到一条消息" 在地址:5005处收听传输dt_socket ".但是当我尝试连接jdb或Idea时,我得到" java.io.IOException:handshake failed-connection prematurally closed ".

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

小智 31

从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

  • 不适合我。不确定我在这里做错了什么。我已经在我的进程上指定了一个调试端口(在 docker 容器内运行),并且我在 docker-compose 上公开了该端口。我缺少什么? (7认同)