VagrantでCoreOSを実行しています。 VagrantプライベートネットワークIPは192.168.111.1です。 CoreOS内には、Tomcat 8.0.32を備えたdockerコンテナがあります。ほぼすべてが正常に機能します(アプリの展開など)だけではデバッグできません。 Tomcatは8080ポートにマップされ、JPDAポートは8000である必要があります。
Tomcat JPDAは以下で構成されます。
_JDPA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
_
_catalina.sh jpda start
_コマンドで始まります。 _docker-compose
_で実行した場合のコンソールの出力は次のとおりです。
_Tomcat | Listening for transport dt_socket at address: 8000
_
コンテナ情報から、ポートは必要に応じてマップされていると想定しています。
_CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcae1e0148f8 Tomcat "/run.sh" 8 minutes ago Up 8 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp Tomcat
_
私のdockerイメージはこれに基づいています Dockerfile 。
リモートデバッグ構成を実行しようとすると(下のスクリーンショット)、エラーError running Debug: Unable to open debugger port (192.168.111.1:8000): Java.net.ConnectException "Connection refused"
が表示されます。さまざまな構成の変更からすべてを試しましたが、運はありません。何か不足していますか?
これは私がこれに使用するコマンドです:
docker run -it --rm \
-e JPDA_ADDRESS=8000 \
-e JPDA_TRANSPORT=dt_socket \
-p 8888:8080 \
-p 9000:8000 \
-v D:/tc/conf/Tomcat-users.xml:/usr/local/Tomcat/conf/Tomcat-users.xml \
Tomcat:8.0 \
/usr/local/Tomcat/bin/catalina.sh jpda run
説明
Dockerfile
はいつでも次のように更新できます。-
FROM Tomcat:8-jre8
MAINTAINER me
ADD target/app.war /usr/local/Tomcat/webapps/app.war
ENV JPDA_ADDRESS="8000"
ENV JPDA_TRANSPORT="dt_socket"
EXPOSE 8080 8000
ENTRYPOINT ["catalina.sh", "jpda", "run"]
ただし、これは、Dockerファイルがデフォルトでデバッグをオンにしていることを意味しますが、これはおそらく実稼働環境には適していません。
Dockerfileに追加してみてください
ENV JPDA_ADDRESS=8000
ENV JPDA_TRANSPORT=dt_socket
わたしにはできる
明らかにJava 11を使用していたため、受け入れられた答えは私にはうまくいきませんでした。Java 9以降を使用している場合、JPDAアドレスを次のように指定する必要があります。
JPDA_ADDRESS=*:8100
Docker-composeを使用する場合、同じではないにしても、同様の問題を解決しました。
環境変数がdocker-compose.ymlファイルから適切に渡されていませんでした。
ポート8080が接続のためにIntelliJに公開されていることを確認する必要があります。つまり、dockerの実行中は、docker run -p 8080:8080
たとえば、以下の手順/チェックを行うことで、このような同様の要件を達成できます。
これは私のdocker runコマンドのようです:
Sudo docker run --privileged=true -d -p 63375:63375 -p 63372:8080 -v /tmp/:/usr/local/Tomcat/webapps/config <container name>:<tag>
注:コンテナとホストの両方に余分なポート63375を公開しています。以下のCATALINA_OPTSで使用しているのと同じポート。
これは、(私が構築しているイメージの)エントリポイントがどのように見えるかです。注:CATALINA_OPTSを使用しています。また、mavenを使用してイメージを作成しているため、以下はpom.xmlからの抜粋です。
<entryPoint>
<Shell>cd /usr/local/Tomcat/bin; CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=63375,server=y,suspend=n" catalina.sh run</Shell>
</entryPoint>
私にとってはこのようにきれいです:
docker run -e Java_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n" -p 8000:8000 Tomcat:8.5-jdk8
このように、コンテナDockerfileを変更する必要はありません。
説明:すべてJava Java_TOOL_OPTIONS環境変数のバージョンチェック: https://docs.Oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html
ローカル環境でも同様の設定をしています。 JPDA_ADDRESSを環境変数としてDockerfileに含め、コンテナーを再作成しました。
ENV JPDA_ADDRESS 8000
#Expose port 8080, JMX port 13333 & Debug port 8000
EXPOSE 8080 13333 8000
CMD ["tail", "-f", "/dev/null"]