Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Spring Boot kann keine Verbindung zu MySQL herstellen und beendet Docker/Docker Compose

Sie übergeben den DATABASE_HOST , DATABASE_PORT , DATABASE_NAME , DATABASE_USER und DATABASE_PASSWORD aber Sie verwenden es nicht in Ihrer App.

Aktualisieren Sie Ihre Eigenschaften wie folgt. (Besser, wenn Sie ein Profil erstellen, damit Ihre App außerhalb von Docker läuft)

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

Wenn Sie wirklich localhost verwenden möchten als Ihre db_url . Sie können auch network_mode: "service:[service name]" verwenden Eigentum von docker compose. Der einzige Nachteil ist, dass diese Eigenschaft nicht mit port verwendet werden kann Eigentum.

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

Und Ihre Eigenschaftendatei könnte so aussehen

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