我已经使用docker-compose创建了mysql docker容器。我建立了容器并在mysql中创建了一些表。但是,当我重新启动计算机时,我在mysql中丢失了数据(表和数据)。我正在使用容器中的本地文件夹作为卷。但是我看到它没有安装在虚拟容器中。
我的操作系统是Windows 10 Pro。我试图重新启动Docker桌面和容器,但是并没有帮助。这是我正在运行的.yml
:
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']
答案 0 :(得分:2)
MySQL docker映像存在一些权限问题。因此,您可以使用具有no issues和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中,然后创建数据库并将该备份文件加载到数据库中