Eu estou testando o docker e resolvi fazer uma coisa bem simples, criar uma aplicação que tenta se conectar VIA HOST ao container do MySQL.
Eu usei o Compose:
version: '3.5'
services:
mysql-java:
container_name: mysql-java
image: mysql/mysql-server:8.0.18
ports:
- 3306:3306
restart: always
environment:
MYSQL_ROOT_PASSWORD: as123d
MYSQL_USER: root
MYSQL_DATABASE: loja_virtual
MYSQL_PASSWORD: as123d
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
Quando eu tento rodar a aplicação do Java, ele retorna uma exceção:
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.
Código do Java:
public static void main(String[] args) {
String conMySQL = "jdbc:mysql://mysql-java:3306/"
+ "loja_virtual"
+ "?useTimezone=true"
//
// + "&useSSL=false"
+ "&serverTimezone=UTC";
System.out.println("URI: " + conMySQL);
// jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC
try (Connection conn =
DriverManager.getConnection(conMySQL, "root", "as123d");)
{
System.out.println("Conexão estabelecida !");
}
catch (SQLException e) {
e.printStackTrace();
}
}
Tentei de tudo! Tentei referenciar o IP do container, tentei o IP principal do Docker e cheguei a testar localhost, mas é improvável que funcione usando localhost, visto que são máquinas diferentes.
Alguém tem alguma sugestão do que pode ser feito?
E outra dúvida, a aplicação java deve ser upada em um container também? neste caso, como eu desenvolveria? como eu testaria/rodaria e mandaria o código para lá? isso é possível?
EDIT: -Eu coloquei o driver do MySQL no eclipse de acordo com a versão.