我有一个包含以下内容的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时, 我看到一条消息“正在 侦听地址为5005的传输dt_socket ”。但是,当我尝试与jdb或Idea连接时,出现“ java.io.IOException:握手失败-连接过早关闭 ”。
如果我将 openjdk:9 更改为 openjdk:8, 则一切正常。但是,我的项目需要Java 9。
从Java 9开始,JDWP套接字连接器默认情况下仅接受本地连接。参见:http : //www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435
因此,要从外部启用调试连接,请指定*:<port>为地址:
*:<port>
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005