web-dev-qa-db-ja.com

リモートデバッグJava IntelliJのdockerコンテナーで9 IDEA

私はこの内容の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:9openjdk:8に変更すると、すべてが正常に機能します。ただし、プロジェクトにはJava 9が必要です。

15
Iurii Drozdov

Java 9から、JDWPソケットコネクタはデフォルトでローカル接続のみを受け入れます。以下を参照してください。 http://www.Oracle.com/technetwork/Java/javase/9​​-notes- 3745703.html#JDK-8041435

したがって、外部からのデバッグ接続を有効にするには、アドレスとして*:<port>を指定します。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

39
Jorrit Posthuma