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

编程入门 行业动态 更新时间:2024-10-18 06:01:22
本文介绍了在 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/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/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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-03-31 04:20:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/795948.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:容器   IDEA   IntelliJ   Java   docker

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!