簡體   English   中英

MySql Docker 容器的數據在 docker-compose up 后不再存在

[英]Data of MySql Docker Container doesn't persist after docker-compose up

我正在運行兩個 docker 容器:

  • docker-mysql-活動
  • 活動服務

並且我可以確保數據的持久性,這要歸功於數據量。

那是我的 docker-compose.yml

version: '3'
services:

  docker-mysql-activity:
    image: mysql:latest
    container_name: docker-mysql-activity
    volumes:
    - mysql_activity:/var/lib/mysql
    ports:
      - 33061:3306
    environment:
        - MYSQL_ROOT_PASSWORD=admin123
        - MYSQL_DATABASE=SCactivity
        - MYSQL_USER=testuser
        - MYSQL_PASSWORD=testuser@123

  activity-service:
    image: activity-service:latest
    container_name: activity-service
    environment:
      - SPRING_APPLICATION_NAME=activity-service
    hostname: activity-service
    build:
      context: ./activity-service
      dockerfile: Dockerfile
    ports:
      - 9001:9001
    depends_on:
      - service-registry
      - docker-mysql-activity

volumes:
  mysql_activity:

當我執行doke-compose up一切順利並創建卷時,我已經驗證查看 Docker 的卷文件夾並正確保存數據(所有驗證均通過 postman - GET 和 POST 數據正常工作)。

當我嘗試關閉 docker-compose停止docker-compose 然后再次啟動 docker-compose 時,會出現問題,數據不再存在。

我確信這個問題與docker-compose down 無關,因為卷仍然存在,而是當我執行命令docker-compose up時重置卷內的數據。

編輯

活動服務是一個 Spring 引導微服務

它有這個 application.yml:

server:
  port: 9001

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://docker-mysql-activity:3306/SCactivity?createDatabaseIfNotExist=true
    username: testuser
    password: testuser@123
    hikari:
      initialization-fail-timeout: 0
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect
    generate-ddl: true
    show-sql: true
    hibernate:
      ddl-auto: create

表 Class 是 Activity.java:

@Entity
@Table(name = "Activity")
@Getter
@Setter
public class Activity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ACT_ID")
    private long id;
    @Column(name = "NAME")
    private final String name;
    @Column(name = "DESCR")
    private final String descr;
    @Column(name = "fitness")
    private Boolean fitness;
    @Column(name = "nuoto")
    private Boolean nuoto;


    public Activity() {
        this.name = "";
        this.descr = "";
    }
}

解決了問題在這里:

server:
  port: 9001

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://docker-mysql-activity:3306/SCactivity?createDatabaseIfNotExist=true
    username: testuser
    password: testuser@123
    hikari:
      initialization-fail-timeout: 0
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect
    generate-ddl: true
    show-sql: true
    hibernate:
      ddl-auto: create

代替

ddl-auto: create 

ddl-auto:update

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM