2
respostas

Erro na conexão com o mysql

Após rodar no docker estou tomando erro de conexão com o banco... como consigo fazer a imagem chegar no banco de dado na outra imagem? com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

2 respostas

Tentando dessa forma com um docker-compose mas a imagem não sobe...

version: "3.7"

services:
  db:
    image: mysql:8.1
    command: --default-authentication-plugin=mysql_native_password --general_log=ON --bind_address=0.0.0.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ROOT_HOST: "%"
    volumes:
      - ./~mysql-data:/var/lib/mysql
    ports:
      - 3306:3306
    networks:
      - mysql-compose-network

  adminer:
    image: adminer
    restart: always
    ports:
      - 8282:8080
    networks:
      - mysql-compose-network

  node:
    build:
      dockerfile: Dockerfile
      context: .
    image: khipu/openjdk17-alpine
    container_name: jornadamilhas
    ports:
    - 3080:8080
    networks:
      - mysql-compose-network
    depends_on:
      - "db"

networks: 
  mysql-compose-network:
    driver: bridge

E aí, Lincoln!

Esse erro de "Communications link failure" no MySQL via Docker é meio chato, mas a gente resolve! Parece que tá rolando algum problema na comunicação entre a imagem do MySQL e o restante da galera no Docker-compose.

Primeiro, certifica de que os serviços estão na mesma rede. Vi que você tá usando mysql-compose-network, o que é um bom começo. Agora, já tentou trocar o host de conexão no seu aplicativo para o nome do serviço no Docker-compose? No seu caso, seria algo como db ou mysql. Tipo assim:

spring.datasource.url=jdbc:mysql://db:3306/seubanco

Ah, e tem um detalhezinho na configuração do MySQL no Docker-compose. Tira a linha --bind_address=0.0.0.0 do command do serviço de banco de dados. Isso pode tá causando umas tretas na comunicação. A configuração do MySQL dentro do container já tá boa sem isso.

Depois dessas paradas, sobe tudo de novo com um docker-compose up --build e veja se agora rola uma conexão suave.