Docker compose 成功执行,没有警告,但数据库中不存在表

问题描述 投票:0回答:1

在开发过程中,我正在努力创建一个可以成功连接MySQL容器和Spring Boot容器的工作Docker Compose文件。

docker-compose.yml

services:
  backend:
    build:
      context: ./backend/
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      db:
        condition: service_healthy
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/${MYSQL_DATABASE}
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD}
    networks:
      - springboot-mysql-network
  db:
    image: mysql:8.0.36
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - springboot-mysql-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 3s
      timeout: 30s
      retries: 10

volumes:
  mysql-data:
networks:
  springboot-mysql-network:
    name: springboot-mysql-network

应用程序属性

spring.application.name=backend

# Datasource connection
spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# Hibernate
spring.jpa.hibernate.ddl-auto=create
spring.jpa.generate-ddl=true

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.8'
    id 'io.spring.dependency-management' version '1.1.6'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-devtools:3.2.0'
    implementation 'mysql:mysql-connector-java:8.0.28'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
    useJUnitPlatform()
}

后端/Dockerfile

FROM openjdk:17-alpine
RUN addgroup -S appuser && adduser -S appuser -G appuser
USER appuser:appuser
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

当我不使用 MySQL 容器而是使用在主机上运行的 MySQL 实例时,表已成功创建。但是,当您尝试使用 MySQL 容器时,表创建似乎失败。

java spring-boot docker docker-compose
1个回答
0
投票

我已经解决了这个问题。我已使用以下内容更改了数据源连接中的配置:

# Datasource connection
spring.datasource.platform=mysql
spring.datasource.initialization-mode=always
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.