私はこの内容の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が必要です。
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