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

23

我有一个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 up时,我看到一条消息 "Listening for transport dt_socket at address: 5005"。但是当我尝试使用jdb或Idea连接时,我会收到 "java.io.IOException: handshake failed - connection prematurally closed"。
如果我将openjdk:9更改为openjdk:8,则一切正常运作。然而,我的项目需要Java 9。

2
请参见:https://youtrack.jetbrains.com/issue/IDEA-173607 - Henry
请查看以下链接以获取详细步骤: https://dev59.com/DlsX5IYBdhLWcg3wLM3K#61660010 - Rachangouda Patil
1个回答

57

谢谢,这对我很有帮助,不确定为什么这不是被采纳的答案。 - Mikkel Løkke
10
对我没用,不确定我做错了什么。我已经在我的进程上指定了一个调试端口(运行在 Docker 容器中),并在 docker-compose 上暴露了该端口。我缺少什么? - redwulf
1
一旦您修复了CMD,您可能需要运行docker-compose up --build来重新构建您的镜像。 - Fabian Braun
如果我正在使用docker-compose.yml文件,并且我想要调试的服务使用端口映射8084:8080,那么我需要在调试配置窗口中将端口5005更改为8084吗? 当然,在开始调试会话之前,我需要构建镜像并运行docker-compose up,对吧? - Ahmed Abdelhak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接