Can't seem to get my Tomcat to connect to my Docker container.
Logs are spitting out the following at the root of the stack trace:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2095)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2020)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:117)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:123)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:367)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:196)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541)
... 176 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.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 sun.reflect.GeneratedConstructorAccessor66.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2036)
... 192 more
Caused by: java.net.UnknownHostException: mysql
at java.net.InetAddress.getAllByName0(InetAddress.java:1280)
at java.net.InetAddress.getAllByName(InetAddress.java:1192)
at java.net.InetAddress.getAllByName(InetAddress.java:1126)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
... 194 more
Setup:
- Windows 10
- JDK/JRE 1.8
- Tomcat 7
- Docker 19
- MySQL 5.7
Configuration:
database.jdbcUrl=jdbc:mysql://internal-mysql:3307/app_main?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&sendFractionalSeconds=false&useSSL=false&rewriteBatchedStatements=true
docker-compose.yml:
mysql:
restart: always
image: "percona:5.7"
ports:
- "3307:3307"
environment:
MYSQL_USER: root
MYSQL_PASSWORD: password
volumes:
- ./mysql/conf:/etc/mysql:ro
- ./mysql/initdb.d:/docker-entrypoint-initdb.d:rw
healthcheck:
test: ["CMD-SHELL", "mysqlshow --host=127.0.0.1 --port 3307 --user=root--password=password app_main"]
interval: 15s
timeout: 1s
retries: 5
start_period: 30s
networks:
default:
aliases:
- internal-mysql
Miscellaneous:
- Tried setting the my.cnf setting
bind-address = 0.0.0.0
andskip-networking
is not set. - Windows Firewalls are off.
Edit: I am able to connect to the Docker/MySQL container perfectly fine through a standalone program like HeidiSQL or Workbench via internal-mysql:3307
. So it seems the connection issues lie solely on the Java and/or Tomcat side and not the container.