Saltar al contenido

Docker MySQL: no se puede conectar desde la aplicación Spring Boot a la base de datos MySQL

Solución:

Prueba esto docker-compose.yml:

version: '3'
services:
  workaround-mysql:
    container_name: workaround-mysql
    image: mysql
    environment:
      MYSQL_DATABASE: workaround
      MYSQL_USER: springuser
      MYSQL_PASSWORD: admin
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3308:3306"
    restart: always
  workaround:
    depends_on: 
      - workaround-mysql
    restart: always
    # will build ./docker/workaround/Dockerfile
    build: ./docker/workaround
    working_dir: /workaround
    volumes:
      - ./:/workaround
      - ~/.m2:/root/.m2
    expose:
      - "8080"
    command: "mvn clean spring-boot:run"

Y actualiza tu application.properties para usar la siguiente URL de conexión JDBC:

spring.datasource.url=jdbc:mysql://workaround-mysql:3306/workaround?serverTimezone=UTC&max_allowed_packet=15728640

Debería funcionar cuando ambos contenedores están en el mismo archivo docker-compose, porque docker-compose crea una red predeterminada para los contenedores, por lo que pueden resolverse entre sí por su nombre.

Lo que no ha intentado hasta ahora es ejecutar ambos contenedores en la misma red Docker.

Primero, olvídese del direccionamiento IP; su uso debe evitarse por todos los medios.

En segundo lugar, inicie ambas instancias de redacción con la misma red Docker.

Tercera, no hacer Exponer puertos: dentro de la red de puente, todos los puertos son accesibles para los contenedores en ejecución.

  1. Crea una red global

     docker network create foo
    
  2. Modifica ambos archivos de redacción para que utilicen esta red en lugar de crear cada uno el suyo:

     version: '3.5'
     services:
    
     ....
    
     networks:
       default:
         external: true
         name: foo
    
  3. Eliminar expose directivas de archivos de composición: dentro de una red, todos los puertos están expuestos de forma predeterminada

  4. Modifique las cadenas de conexión para usarlas por defecto 3306 puerto en lugar de 3308

  5. Disfrutar

Para que el servicio se conecte con MySql a través de Docker, tiene que estar en la misma red, busque en la red de Docker.

Pero para una mejor solución, le sugiero que escriba un solo archivo de composición de Docker para MySql y Spring boot. La razón es que se vinculará fácilmente cuando lo haga. No necesita ninguna otra configuración.

version: "3"
services:
  mysql-service:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=db
      - MYSQL_USER=root
      - MYSQL_PASSWORD=pass
      - MYSQL_ROOT_PASSWORD=pass
  spring-service:
    image: springservce:latest
    ports:
      - "8080:8080"
    depends_on:
      - mysql-service

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *