2
respostas

Comunicação entre containers

Estou com um container mysql que consigo acessar normalmente pela minha aplicação springboot localmente (sem container). Mas quando tento criar um container dessa aplicação springboot para assim acessar esse container mysql, eu recebo um erro de conexão com o banco do container.

Erro ao tentar rodar container com app spring boot:

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.30.jar!/:8.0.30] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.30.jar!/:8.0.30]

... at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[app.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[app.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[app.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[app.jar:0.0.1-SNAPSHOT] Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

Os comandos utilizados para rodar os containers sao:

docker run --name bd_microservices -p 3306:3306 -e MYSQL_ROOT_PASSWORD=MINHA_SENHA -e MYSQL_DATABASE='alurafood-pedidos' -e MYSQL_USER='microservices' -e MYSQL_PASSWORD='microservices2022' --network minha-bridge -d mysql:8.0

docker build -t exemplo . docker run --name app_exemplo -p 8080:8080 --network minha-bridge -d exemplo:latest

Dockerfile da aplicacao spring FROM openjdk:17-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]

Como resolvo essa questao? Seria problema na hora da criacao dos containers ou da minha imagem?

2 respostas

Oi, Aluno. Tudo bem?

Como está a string de conexão com o banco de dados na sua aplicação? Pode mandar aqui para termos mais contexto, por favor? Você pode verificar se o container do banco subiu direitinho executando o comando docker container logs -f CONTAINER-ID, sendo que "CONTAINER-ID" é o ID que o docker retorna depois do docker run.

Se o container do banco tiver subido certinho, deve aparecer algo do tipo:

`2022-10-24T23:27:59.725998Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.30'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

Olá Vitor. Ao subir o container do mysql ele me dá justamente essa saída postada por vc (ready for connections).

Quanto a minha conexao com o banco, estou fazendo da seguinte forma na aplicação em meu application.properties:

spring.datasource.url=jdbc:mysql://microservices:microservices2022@localhost:3306/alurafood-pedidos
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver