You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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目录里,得注意两个点:

  1. 先手动创建C:/Users/john_/Documents/mySQLdatabases这个文件夹,然后右键它→属性→安全,给Everyone添加完全控制的权限(不然MySQL容器没有写入权限)
  2. 调整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

三、验证数据是否真的持久化了

改完配置后,按下面的步骤测试:

  1. 先彻底清理旧容器和卷:docker-compose down -v(加-v是为了删掉之前的临时卷,确保新配置生效)
  2. 重新启动容器:docker-compose up -d
  3. 用MySQL Workbench连上去,建个测试表插点数据
  4. 重启电脑,然后打开Docker,启动容器:docker-compose start
  5. 再连接数据库看看,测试数据应该还在

为啥之前的配置没用?

你原来的配置里,虽然写了挂载本地目录,但大概率是Docker没拿到这个目录的访问权限,导致容器实际上没把数据写到你指定的文件夹,而是用了Docker的临时存储——所以重启容器时数据还在,但重启电脑后临时存储被清掉,数据就没了。

内容的提问来源于stack exchange,提问作者grabbag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:19:30