I am developing a small application using springboot with maven and a mysql db.
I created a Dockerfile that’s working but when I try to do docker-compose up the connection from app to db is refused.
here my docker-compose
version: '3.8'
services:
app:
image: jayaz98/angelodaleotest:0.0.1
ports:
- 8080:8080
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/angelodaleoptdb?autoReconnect=true&useSSL=false
SPRING_DATASOURCE_USERNAME: admin
SPRING_DATASOURCE_PASSWORD: root
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.0.27
environment:
DATABASE_HOST: docker-mysql
DATABASE_PORT: 3306
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: angelodaleoptdb
MYSQL_USER: admin
MYSQL_PASSWORD: root
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
retries: 5
timeout: 5s
my application.properties
spring.application.name=project
spring.datasource.url=jdbc:mysql://localhost:3306/angelodaleoptdb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.connectionTimeout=100000
spring.datasource.hikari.initializationFailTimeout=0
spring.datasource.hikari.maximumPoolSize=10
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
server.servlet.context-path=/angelodaleopt
and this is the error i get from the app, with the db logs
2024-09-26 00:40:53 db-1 | 2024-09-25 22:40:53+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2024-09-26 00:40:53 db-1 | 2024-09-25 22:40:53+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-09-26 00:40:53 db-1 | 2024-09-25 22:40:53+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2024-09-26 00:40:53 db-1 | 2024-09-25 22:40:53+00:00 [Note] [Entrypoint]: Initializing database files
2024-09-26 00:40:53 db-1 | 2024-09-25T22:40:53.473629Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.27) initializing of server in progress as process 42
2024-09-26 00:40:53 db-1 | 2024-09-25T22:40:53.481794Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-09-26 00:40:53 db-1 | 2024-09-25T22:40:53.845476Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-09-26 00:40:54 db-1 | 2024-09-25T22:40:54.943102Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2024-09-26 00:40:54 db-1 | 2024-09-25T22:40:54.943145Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2024-09-26 00:40:54 db-1 | 2024-09-25T22:40:54.994521Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2024-09-26 00:40:58 db-1 | 2024-09-25 22:40:58+00:00 [Note] [Entrypoint]: Database files initialized
2024-09-26 00:40:58 db-1 | 2024-09-25 22:40:58+00:00 [Note] [Entrypoint]: Starting temporary server
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.361816Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 91
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.373966Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.506201Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.719550Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.719583Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.720212Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.720267Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.722339Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.734210Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
2024-09-26 00:40:58 db-1 | 2024-09-25T22:40:58.734321Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
2024-09-26 00:40:58 db-1 | 2024-09-25 22:40:58+00:00 [Note] [Entrypoint]: Temporary server started.
2024-09-26 00:40:59 db-1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
2024-09-26 00:40:59 db-1 | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
2024-09-26 00:41:00 db-1 | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
2024-09-26 00:41:00 db-1 | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
2024-09-26 00:41:00 db-1 | 2024-09-25 22:41:00+00:00 [Note] [Entrypoint]: Creating database angelodaleoptdb
2024-09-26 00:41:00 db-1 | 2024-09-25 22:41:00+00:00 [Note] [Entrypoint]: Creating user admin
2024-09-26 00:41:00 db-1 | 2024-09-25 22:41:00+00:00 [Note] [Entrypoint]: Giving user admin access to schema angelodaleoptdb
2024-09-26 00:41:00 db-1 |
2024-09-26 00:41:00 db-1 | 2024-09-25 22:41:00+00:00 [Note] [Entrypoint]: Stopping temporary server
2024-09-26 00:41:00 db-1 | 2024-09-25T22:41:00.658231Z 13 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.27).
2024-09-26 00:41:02 db-1 | 2024-09-25T22:41:02.352849Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.27) MySQL Community Server - GPL.
2024-09-26 00:41:02 db-1 | 2024-09-25 22:41:02+00:00 [Note] [Entrypoint]: Temporary server stopped
2024-09-26 00:41:02 db-1 |
2024-09-26 00:41:02 db-1 | 2024-09-25 22:41:02+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
2024-09-26 00:41:02 db-1 |
2024-09-26 00:41:02 db-1 | 2024-09-25T22:41:02.878815Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
2024-09-26 00:41:02 db-1 | 2024-09-25T22:41:02.885905Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.000695Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.177047Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.177090Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.177808Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.177859Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.179999Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.191853Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2024-09-26 00:41:03 db-1 | 2024-09-25T22:41:03.192079Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
2024-09-26 00:41:04 app-1 |
2024-09-26 00:41:04 app-1 | . ____ _ __ _ _
2024-09-26 00:41:04 app-1 | /\ / ___'_ __ _ _(_)_ __ __ _
2024-09-26 00:41:04 app-1 | ( ( )___ | '_ | '_| | '_ / _` |
2024-09-26 00:41:04 app-1 | \/ ___)| |_)| | | | | || (_| | ) ) ) )
2024-09-26 00:41:04 app-1 | ' |____| .__|_| |_|_| |___, | / / / /
2024-09-26 00:41:04 app-1 | =========|_|==============|___/=/_/_/_/
2024-09-26 00:41:04 app-1 | :: Spring Boot :: (v2.7.0)
2024-09-26 00:41:04 app-1 |
2024-09-26 00:41:05 app-1 | 2024-09-25 22:41:05.008 INFO 1 --- [ main] i.a.project.ProjectApplication : Starting ProjectApplication v0.0.1-SNAPSHOT using Java 11.0.16 on 4815623c35dd with PID 1 (/opt/opt/app.jar started by root in /opt)
2024-09-26 00:41:05 app-1 | 2024-09-25 22:41:05.014 INFO 1 --- [ main] i.a.project.ProjectApplication : No active profile set, falling back to 1 default profile: "default"
2024-09-26 00:41:05 app-1 | 2024-09-25 22:41:05.977 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.038 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51 ms. Found 4 JPA repository interfaces.
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.587 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.600 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.601 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.63]
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.671 INFO 1 --- [ main] o.a.c.c.C.[.[.[/angelodaleopt] : Initializing Spring embedded WebApplicationContext
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.671 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1579 ms
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.839 INFO 1 --- [ main] i.a.project.cors.SimpleCORSFilter : SimpleCORSFilter init
2024-09-26 00:41:06 app-1 | 2024-09-25 22:41:06.974 INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-09-26 00:41:07 app-1 | 2024-09-25 22:41:07.020 INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.9.Final
2024-09-26 00:41:07 app-1 | 2024-09-25 22:41:07.215 INFO 1 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2024-09-26 00:41:07 app-1 | 2024-09-25 22:41:07.302 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2024-09-26 00:41:12 app-1 | 2024-09-25 22:41:12.471 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2024-09-26 00:42:52 app-1 | 2024-09-25 22:42:52.482 WARN 1 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata
2024-09-26 00:42:52 app-1 |
2024-09-26 00:42:52 app-1 | java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 100002ms.
2024-09-26 00:42:52 app-1 | at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:696) ~[HikariCP-4.0.3.jar!/:na]
2024-09-26 00:42:52 app-1 | at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) ~[HikariCP-4.0.3.jar!/:na]
2024-09-26 00:42:52 app-1 | at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) ~[HikariCP-4.0.3.jar!/:na]
2024-09-26 00:42:52 app-1 | at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) ~[HikariCP-4.0.3.jar!/:na]
2024-09-26 00:42:52 app-1 | at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
2024-09-26 00:42:52 app-1 | at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175) ~[hibernate-core-5.6.9.Final.jar!/:5.6.9.Final]
...
I tried everything I know but its not sufficient
2
Answers
You’re trying to use
localhost
in your application propertiesspring.datasource.url=jdbc:mysql://localhost:3306/angelodaleoptdb?useSSL=false&serverTimezone=UTC
Use the service name
Edit: Wrong, the environment variable takes precedence apparently
The issue comes to the SPRING_DATASOURCE_URL env variable. You should add
allowPublicKeyRetrieval=true
withuseSSL=false
.allowPublicKeyRetrieval=true
allows the JDBC driver to request the public key from the server automatically. By default, client libraries will not send the password unless a secure connection (using TLS or RSA public key encryption) can be established. To avoid a MITM attack, the RSA public key will not be sent in plain text.It will also work without
allowPublicKeyRetrieval=true
anduseSSL=false
.