リモートのDockerで動作するJavaアプリケーションをデバッグする方法
なぜリモートのDockerでデバッグしたいのか
Docker for Macの動作が重く、変更の反映や再起動に時間がかかる状態であったため、EC2インスタンスに立てたDockerでデバッグ実行をしたくなりました。IntelliJ IDEAのリモートデバッグという機能を使うと可能になります。具体的な設定方法をご紹介いたします。
IntelliJ IDEA側の設定
IntelliJ IDEAのRun/Debug Configurationを設定することでデバッグ実行することができます。
リモートのホストを設定
Runタブから「Edit Configurations...」 を選択します。
「Configuration」の「Host」にリモートのホストのIPアドレスを入力します。
アプリケーション起動コマンドのオプションを指定
「Command line arguments for remote JVM」の内容をコピーします。(後ほどコンテナ側の設定で必要)
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
以上で、IDE側の設定が完了です。
コンテナの設定
先程コピーした値を、実行対象プロジェクトの build.gradle のbootRunコマンドに対して以下のように指定します。
- build.gradle
bootRun { jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" }
次に、5005番ポートを開放します。
以下はdocker-composeを利用している場合の設定になります。
- docker-compose.yml
ports: - 8080:8080 - 5005:5005
セキュリティグループの設定
最後にセキュリティグループで、
8080、5005番ポート へのアクセスを許可してください。
以上の設定で全て完了です。
以降はローカルでの実行同様、ブレークポイントをセットし、デバッグ実行を行うとそこで停止してくれます!
まとめ
意外と簡単な設定でデバッグ実行ができたので、とても便利でした。
もちろん、localhostを指定することでローカルで起動しているDockerに対しても利用することができます。ぜひ試してみてください。
公式ドキュメント
https://www.jetbrains.com/help/idea/debug-a-java-application-using-a-dockerfile.html