Run and debug a Spring Boot application using Docker Compose
You can use IntelliJ IDEA to run and debug a Spring Boot application running in multiple Docker containers under Docker Compose. This tutorial describes how to run two Docker Compose services inside containers: a simple Spring Boot application and a MySQL database. The application can receive GET requests that add entries to the database. This tutorial also describes how you can set breakpoints and debug your application using a remote debug configuration.
Clone the sample project
The source code of the application is hosted on GitHub at https://github.com/IdeaUJetBrains/SpringBootDockerDemoDebug
From the main menu, select
Specify the URL of the repository and click Clone.
Agree to open the cloned project in a new window.
Run the application using Docker Compose
Open the docker-compose-debug.yml file.
Click in the gutter.
This creates a Docker Compose run configuration, which starts the application in a container as the app service and the database in another container as the db service. If successful, you should see something similar to the following in the deploy log:
Creating db ... Creating springbootdockerdemodebug_app_1 ... 'Compose: docker-compose-debug.yml' has been deployed successfully.You can access the application at http://localhost:18080. For example, you can try to execute the following GET request, which should add a new
entitybus
entry to the database and list all available entries: http://127.0.0.1:18080/entitybus/post.You can connect to the database at jdbc:mysql://0.0.0.0:13306/DOCKERDB. Use the Database tool window to add the database as a data source and check the
entitybus
table. Use the following connection settings:Host:
0.0.0.0
orlocalhost
Port:
13306
User:
root
Password:
root
Database:
DOCKERDB
Create a remote debug configuration
Open the docker-compose-debug.yml file.
Click in the gutter.
Select the module in the Use module classpath list.
Double-click the Docker Compose run configuration in the Before launch list. If it is not in the list, click and select Launch Docker before debug.
Make sure that the Docker Compose run configuration is selected with the app service. Also check the Custom Command field: it should contain the
-agentlib
option and options from thecommand
field in the docker-compose-debug.yml file:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -Djava.security.egd=file:/dev/./urandom -jar /project/target/demo-0.0.1-SNAPSHOT.jar
If the application is already running, do not run the debug configuration. Apply the settings and click Cancel.
Launch the debug configuration
If the application is already running, stop it. To do it, select the Docker Compose node in the Services tool window and click in the toolbar. Alternatively, you can right-click and delete the containers under the corresponding services.
Open the docker-compose-debug.yml file.
Click in the gutter and start the debug configuration.
Once the application starts and the debugger attaches to it, the Debug tool window will open.
Set a breakpoint and debug the application
Open the src/main/java/entity/Entitybus.java file and set a breakpoint in the
setEid()
method.Execute the following GET request: http://127.0.0.1:18080/entitybus/post
The application will stop at the breakpoint and you can examine the current variable values and frames in the Debug tool window.
Click until it executes the request and you get the returned values.