2

I've created mysql docker container using docker-compose. I built the container and created some tables in mysql. But, when i restarted my computer, i lost my data (tables and data) in mysql. I'am using a local folder in container as a volume. But i see that it's not mounted in virtual container.

My OS is Windows 10 Pro. I've tried to restart the Docker desktop and the containers, but it did not help. Here is the .yml that i'm running:

version: '3.3'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: 'db_name'
      MYSQL_USER: 'db_user'
      MYSQL_PASSWORD: 'db_pass'
      MYSQL_ROOT_PASSWORD: 'db_root_pass'
    ports:
      - '3308:3306'
    volumes:
      - ./mysql-log:/var/log/mysql
      - ./dbdata:/var/lib/mysql
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

4

1 回答 1

1

MySQL docker 镜像存在一些权限问题。因此,您可以使用对 docker 卷没有问题的MariaDB,而不是使用 MySQL

在您的 docker-compose 中,您正在从当前目录挂载 dbdata,由于 MySQL docker 映像的 docker 卷的一些权限问题,该目录不会挂载。挂载到共享文件夹不起作用,而不是使用 ./dbdata 尝试使用 /dbdata

即使我遇到了同样的问题,我也将 MySQL 更改为 MariaDB,并将我的卷安装到 /dbdata,它对我有用。这是我的 docker-compose.yml

version: '3'
services:
  mysql:
    image: mariadb
    container_name: mysql
    environment:
      MYSQL_DATABASE: 'movies'
      # So you don't have to use root, but you can if you like
      MYSQL_USER: 'user'
      # You can use whatever password you like
      MYSQL_PASSWORD: '123'
      # Password for root access
      MYSQL_ROOT_PASSWORD: '1234'
    ports:
    # <Port exposed> : < MySQL Port running inside container>
      - '3306:3306'
    expose:
      # Opens port 3306 on the container
      - '3306'
    # Where our data will be persisted
    volumes:
      - /dbdata :/var/lib/mysql

在您的情况下,您创建的数据库和表没有持久化。如果您有表的备份文件,则将该备份文件移动到虚拟机中的 /dbdata,然后创建数据库并将该备份文件加载到数据库中

于 2019-06-08T09:33:46.050 回答