I’d appreciate some assistance with my Docker Compose setup. I’m trying to connect a Spring Boot application running in one container to a MySQL database in another container, but the connection seems to be failing.
Here’s my current setup:
I’m using Docker Compose to define my services.
One service is for the Spring Boot application.
The other service is for the MySQL database (mysql:latest).
Both services are connected to the same network defined in docker-compose.yml.
I’ve tried two approaches to connect the Spring application to the database:
Using service discovery and network aliases:
The Spring application configuration uses jdbc:mysql://database:3306/my_db for the connection URL (database being the service name for the MySQL container). this was written in the Dockerfile as an argument for the start of the spring server.
Here are some additional details that might be helpful:
I’ve verified that mysql container is running and is healthy within Docker.
I’ve checked the network configuration in docker-compose.yml to ensure they are connected to the same network.
The MySQL service has a health check configured using mysqladmin ping to verify its availability.
What could be causing the connection issue between my Spring application and the MySQL database container? Any suggestions or troubleshooting steps would be greatly appreciated.
Here’s a relevant snippet from my Dockerfile file (excluding sensitive information):
FROM openjdk:21-jdk
# Set the working directory inside the container
WORKDIR /app
# Copy the compiled JAR file into the container
COPY out/artifacts/jar-with-dependencies.jar /app/your-spring-server.jar
# Command to run the Spring server
CMD ["java", "-jar", "/app/your-spring-server.jar", "--spring.datasource.url=jdbc:mysql://10.5.0.5:3307/my_db"]
# I also tried this
# CMD ["java", "-jar", "/app/your-spring-server.jar", "--spring.datasource.url=jdbc:mysql://container_db:3307/my_db"]
Here’s a relevant snippet from my docker-compose.yml file (excluding sensitive information):
services:
database:
image: mysql:latest
container_name: container_db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_db
ports:
- "3307:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u root", "-proot"]
interval: 10s
timeout: 5s
retries: 3
networks:
docker_network:
aliases:
- container_db
ipv4_address: 10.5.0.5
spring_server:
image: spring-app-img
container_name: spring_server
ports:
- "8089:8088"
depends_on:
database:
condition: service_healthy
networks:
docker_network:
aliases:
- spring_server
ipv4_address: 10.5.0.6
networks:
docker_network:
driver: bridge
name: my_network
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1