Mysql
 sql >> Base de données >  >> RDS >> Mysql

Spring Boot ne peut pas se connecter à MySQL et se termine dans Docker/Docker compose

Vous passez le DATABASE_HOST , DATABASE_PORT , DATABASE_NAME , DATABASE_USER et DATABASE_PASSWORD mais vous ne l'utilisez pas dans votre application.

Mettez à jour vos propriétés comme ceci. (Mieux vaut créer un profil pour que votre application s'exécute en dehors de docker)

spring.datasource.url=jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?autoReconnect=true
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}

Si vous voulez vraiment utiliser localhost comme votre db_url . Vous pouvez également utiliser network_mode: "service:[service name]" propriété de docker compose. Le seul inconvénient est que cette propriété ne peut pas être utilisée avec port propriété.

version: '3'

services: 
  docker-mysql:
    image: mysql:latest
    network_mode: "service:spring-boot-jpa-docker-webapp"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_PASSWORD=root
  spring-boot-jpa-docker-webapp:
    image: springboot_docker
    depends_on:
      - docker-mysql
    ports:
      - 8080:8080
      - 3306 #Add this only if you want to expose the mysql to outer world.
    environment:
      - DATABASE_USER=root
      - DATABASE_PASSWORD=root
      - DATABASE_NAME=test

Et votre fichier de propriétés pourrait ressembler à

spring.datasource.url=jdbc:mysql://localhost:3306/${DATABASE_NAME}?autoReconnect=true
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}