Search code examples
javamysqlspring-bootdockerdocker-compose

Updated: SpringBoot inside docker container fails to connect to database


[Update]: I noticed that the real problem may be that the tomcat server isn't started (only in the jar, when running with IntelliJ all seems to be working fine)

I have a docker compose file that defines two services: database and backend. Backend is a Springboot application. For some reason if i run the application locally (but connecting to the database container) it works, but when i run it on docker it fails to connect to the database. Or at least it seems so, I'm not sure what the real problem is and i haven't been abe to find a solution.

here are my files:

docker-compose.yaml

version: '3'

services:
  mysql:
      image: mysql:8.0
      container_name: mysql
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: root
        MYSQL_PASSWORD: root
      ports:
        - "3306:3306"
      volumes:
        - mysql-data:/var/lib/mysql
      networks:
       - my_network

  backend:
    image: eclipse-temurin:17-jdk-jammy
    container_name: backend
    restart: no
    volumes:
      - ./backend/out/artifacts/backend_jar/:/app/
    ports:
      - '80:8080'
    command: /bin/sh -c "cd app && java -jar backend.jar || sleep 2073600"
    networks:
      - my_network

volumes:
  mysql-data:

networks:
  my_network:

application.properties

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:mysql}:3306/root
spring.datasource.username=root
spring.datasource.password=root

and this is the error i get when i run on docker:

2024-02-05 09:30:57   .   ____          _            __ _ _
2024-02-05 09:30:57  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
2024-02-05 09:30:57 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2024-02-05 09:30:57  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2024-02-05 09:30:57   '  |____| .__|_| |_|_| |_\__, | / / / /
2024-02-05 09:30:57  =========|_|==============|___/=/_/_/_/
2024-02-05 09:30:57  :: Spring Boot ::                (v3.2.2)
2024-02-05 09:30:57 
2024-02-05 09:30:57 08:30:57.194 [main] INFO com.example.backend.BackendApplication -- Starting BackendApplication using Java 17.0.10 with PID 7 (/app/backend.jar started by root in /app)
2024-02-05 09:30:57 08:30:57.198 [main] INFO com.example.backend.BackendApplication -- No active profile set, falling back to 1 default profile: "default"
2024-02-05 09:30:57 08:30:57.959 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate -- Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-02-05 09:30:58 08:30:58.041 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate -- Finished Spring Data repository scanning in 69 ms. Found 4 JPA repository interfaces.
2024-02-05 09:30:58 08:30:58.508 [main] INFO com.zaxxer.hikari.HikariDataSource -- HikariPool-1 - Starting...
2024-02-05 09:30:58 08:30:58.757 [main] INFO com.zaxxer.hikari.pool.HikariPool -- HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:9ad12d1c-0bbc-4e56-82ed-3539a4fa97e5 user=SA
2024-02-05 09:30:58 08:30:58.759 [main] INFO com.zaxxer.hikari.HikariDataSource -- HikariPool-1 - Start completed.
2024-02-05 09:30:58 08:30:58.810 [main] INFO org.hibernate.jpa.internal.util.LogHelper -- HHH000204: Processing PersistenceUnitInfo [name: default]
2024-02-05 09:30:58 08:30:58.888 [main] INFO org.hibernate.Version -- HHH000412: Hibernate ORM core version [WORKING]
2024-02-05 09:30:58 08:30:58.931 [main] INFO org.hibernate.cache.internal.RegionFactoryInitiator -- HHH000026: Second-level cache disabled
2024-02-05 09:30:59 08:30:59.221 [main] INFO org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo -- No LoadTimeWeaver setup: ignoring JPA class transformer
2024-02-05 09:30:59 08:30:59.941 [main] INFO org.hibernate.validator.internal.util.Version -- HV000001: Hibernate Validator null
2024-02-05 09:31:00 08:31:00.876 [main] INFO org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator -- HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-02-05 09:31:00 08:31:00.933 [main] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean -- Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-02-05 09:31:01 08:31:01.542 [main] INFO com.example.backend.BackendApplication -- Started BackendApplication in 4.587 seconds (process running for 4.92)
2024-02-05 09:31:01 08:31:01.550 [SpringApplicationShutdownHook] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean -- Closing JPA EntityManagerFactory for persistence unit 'default'
2024-02-05 09:31:01 08:31:01.563 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource -- HikariPool-1 - Shutdown initiated...
2024-02-05 09:31:01 08:31:01.566 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource -- HikariPool-1 - Shutdown completed.

Solution

  • In the end the only thing that worked was to build with maven directly inside the container. Not sure why nor my preferred solution but it works