-1

Running mysql image [latest mysql version] Not duplicate of this problem:

 docker run -d --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=test123" --env="MYSQL_USER=user1"  --env="MYSQL_PASSWORD=test123" --env="MYSQL_DATABASE=dockertest" -p 3306:3306 mysql

Running Spring boot app image:

docker run -t -p 8080:8080 --link docker-mysql:mysql docker-userapp

note:

  1. when I run spring boot with mysql in local enviroment with these credential, project works fine
  2. MySQL container I am running above works fine as I can log in to the containerized MySQL server and run command manually.

It seems, MySQL container is ok, but somehow, spring boot can't access the database. I am new in docker. Please suggest what do I need to change?

spring application.properties file:

spring.jpa.hibernate.ddl-auto=update
server.servlet.contextPath=/docker-api
spring.datasource.url=jdbc:mysql://localhost:3306/dockertest
spring.datasource.username=user1
spring.datasource.password=test123

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.id.new_generator_mappings=true
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.show-sql=true

Error log:

2021-12-06 12:46:18.386 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2021-12-06 12:46:18.389 WARN 1 --- [ main] com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation. 2021-12-06 12:46:19.505 ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.27.jar!/:8.0.27] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.27.jar!/:8.0.27] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.27.jar!/:8.0.27] at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.27.jar!/:8.0.27] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.27.jar!/:8.0.27] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.27.jar!/:8.0.27] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) [HikariCP-4.0.3.jar!/:na] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) [HikariCP-4.0.3.jar!/:na] at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) [HikariCP-4.0.3.jar!/:na] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) [HikariCP-4.0.3.jar!/:na] at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) [hibernate-core-5.6.1.Final.jar!/:5.6.1.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181) [hibernate-core-5.6.1.Final.jar!/:5.6.1.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) [hibernate-core-5.6.1.Final.jar!/:5.6.1.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) [hibernate-core-5.6.1.Final.jar!/:5.6.1.Final]

user404
  • 1,934
  • 1
  • 16
  • 32
  • This question is heavily related to docker, I would suggest adding "docker" into the title. – D-FENS Dec 06 '21 at 13:04
  • see if this helps https://stackoverflow.com/a/53276117/5193536 – nbk Dec 06 '21 at 13:12
  • Mysql and your app are in same network right? You can also access mysql with docker name like "spring.datasource.url=jdbc:mysql://mysql:3306/dockertest" If you defined your mysql as 'mysql' in your docker compose – Gurkan İlleez Dec 06 '21 at 13:59
  • @Gurkanİlleez, yes they are on the same network, thanks for your suggestion. will try that – user404 Dec 06 '21 at 15:43

1 Answers1

0

The error means that you dont have the driver dependency as part of the libs of your APP.jar which is running on docker.

As a start, look into your /target/app.jar, unzip this jar and see if it is a FAT jar, meaning it has all the required dependencies there.

See if you can find the jar mysql-connector-java there, that is what you are missing.

Maven:

https://mvnrepository.com/artifact/mysql/mysql-connector-java

JCompetence
  • 6,997
  • 3
  • 19
  • 26