【问题标题】:Data of MySql Docker Container doesn't persist after docker-compose upMySql Docker Container 的数据在 docker-compose up 后不存在
【发布时间】:2021-05-18 11:14:59
【问题描述】:

我正在运行两个 docker 容器:

  • docker-mysql-activity
  • 活动服务

而且我可以确保数据的持久性,这要归功于数据量。

这是我的 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:

当我执行 docke-compose up 一切顺利并创建卷时,我已经验证查看 Docker 的卷文件夹并正确保存数据(所有验证都通过邮递员 - GET 和 POST数据正常工作)。

当我尝试 docker-compose downdocker-compose stop 然后再次 docker-compose up 时出现问题,数据不再坚持下去。

我确定问题与 docker-compose down 无关,因为卷仍然存在,而是在我执行命令 docker-compose 时重置卷内的数据向上

【问题讨论】:

  • 如果撰写文件中不包含“活动服务”,是否会发生这种情况?您能否提供一个不依赖于我们在问题中没有的命令和文件的minimal reproducible example
  • @BMitch 如果撰写文件中不包含“活动服务”,则不会发生。似乎该服务覆盖了数据库,但是在活动服务的 .yml 文件中我有这个:jdbc:mysql://docker-mysql-activity:3306/SCactivity?createDatabaseIfNotExist=true。

标签: mysql docker docker-compose microservices persistent-volumes


【解决方案1】:

编辑

activity-service 是一个 Spring Boot 微服务。

它有这个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

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2018-12-18
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多