问题描述
我有一个包含此内容的 Dockerfile:
I have a Dockerfile with this content:
FROM openjdk:9
WORKDIR /project
ADD . /project
EXPOSE 5005
我的 docker-compose.yml 看起来像这样:
My docker-compose.yml looks like this:
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 up 时,我看到一条消息正在侦听地址为 5005 的传输 dt_socket".但是当我尝试与 jdb 或 Idea 连接时,我得到java.io.IOException:握手失败 - 连接过早关闭".
When I do docker-composer up I see a message "Listening for transport dt_socket at address: 5005". But when I try to connect with jdb or Idea I get "java.io.IOException: handshake failed - connection prematurally closed".
如果我将 openjdk:9 更改为 openjdk:8,一切正常.但是,我的项目需要 Java 9.
Everything works fine if I change openjdk:9 to openjdk:8. However, I need Java 9 for my project.
推荐答案
从 Java 9 开始,JDWP 套接字连接器默认只接受本地连接.看:http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435
From Java 9, the JDWP socket connector accept only local connections by default. See:http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435
因此,要启用来自外部的调试连接,请将 *:
指定为地址:
So, to enable debug connections from outside, specify *:<port>
as address:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
这篇关于在 IntelliJ IDEA 的 docker 容器中远程调试 Java 9的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!