从IntelliJ IDEA在Docker容器中远程调试Java 9 [英] Remote debugging Java 9 in a docker container from IntelliJ IDEA

查看:669
本文介绍了从IntelliJ IDEA在Docker容器中远程调试Java 9的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有以下内容的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

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

So, to enable debug connections from outside, specify *:<port> as address:

-agentlib:jdwp = transport = dt_socket,服务器= y,暂挂= n,地址= *:5005

这篇关于从IntelliJ IDEA在Docker容器中远程调试Java 9的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆