Docker Compose中MySQL数据库持久化配置问题咨询
解决Windows Docker中MySQL数据重启电脑丢失的问题
嘿,我看你遇到了Windows Docker里MySQL数据重启电脑就丢的麻烦——虽然你已经在docker-compose.yaml里配置了自定义卷,但这个问题在Windows版Docker里挺常见的,大多是文件共享权限或者卷的类型选择出了问题,下面给你几个针对性的解决方案:
一、先检查Docker的文件共享权限(最容易忽略的点)
Windows版Docker需要你手动授权才能访问本地目录,不然容器根本写不了数据到你的本地文件夹:
- 右键托盘里的Docker图标,打开Settings(设置)
- 切换到Resources > File Sharing标签页
- 确保你挂载的目录所在的
C:盘已经被勾选上,然后点击Apply & Restart保存并重启Docker
二、调整docker-compose.yaml的卷配置(两种方案选一个)
方案1:用Docker命名卷(更推荐,稳定不踩坑)
Docker的命名卷是由Docker自己管理存储位置的,比直接挂Windows本地目录兼容性好太多,尤其适合数据库这种需要稳定持久化的场景:
version: '3' services: mysql-purple: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: purple ports: - "3308:3306" volumes: # 用命名卷,Docker会自动在后台管理数据存储 - mysql-purple-data:/var/lib/mysql # 记得在文件末尾声明这个命名卷 volumes: mysql-purple-data:
用这个配置的话,不管你重启容器还是重启电脑,Docker都会稳稳保留这个卷里的数据,不会丢失。
方案2:修复本地目录挂载的问题(如果你坚持要用本地文件夹)
如果你一定要把数据存在自己指定的Windows目录里,得注意两个点:
- 先手动创建
C:/Users/john_/Documents/mySQLdatabases这个文件夹,然后右键它→属性→安全,给Everyone添加完全控制的权限(不然MySQL容器没有写入权限) - 调整
docker-compose.yaml里的卷路径写法,也可以试试WSL风格的路径(即使你用的是Hyper-V后端,有时候这种写法更稳定):
version: '3' services: mysql-purple: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: purple ports: - "3308:3306" volumes: # 用WSL风格的绝对路径,或者保持原路径但确保权限正确 - /c/Users/john_/Documents/mySQLdatabases:/var/lib/mysql:rw
三、验证数据是否真的持久化了
改完配置后,按下面的步骤测试:
- 先彻底清理旧容器和卷:
docker-compose down -v(加-v是为了删掉之前的临时卷,确保新配置生效) - 重新启动容器:
docker-compose up -d - 用MySQL Workbench连上去,建个测试表插点数据
- 重启电脑,然后打开Docker,启动容器:
docker-compose start - 再连接数据库看看,测试数据应该还在
为啥之前的配置没用?
你原来的配置里,虽然写了挂载本地目录,但大概率是Docker没拿到这个目录的访问权限,导致容器实际上没把数据写到你指定的文件夹,而是用了Docker的临时存储——所以重启容器时数据还在,但重启电脑后临时存储被清掉,数据就没了。
内容的提问来源于stack exchange,提问作者grabbag
相关产品推荐
相关产品推荐

