必须挂载数据卷以确保MySQL数据持久化。使用Docker命名卷(如-v mysql-data:/var/lib/mysql)可实现数据持久存储,容器删除后数据仍保留;也可挂载宿主机目录(如-v /my/local/path/mysql-data:/var/lib/mysql)便于开发调试时直接访问数据;在docker-compose.yml中配置volumes可更便捷管理,生产环境推荐命名卷,开发环境可选本地路径,关键是要保证数据目录正确挂载,防止容器删除导致数据丢失。

在使用 MySQL 镜像时,为了保证数据的安全性和持久性,必须将容器内的数据目录挂载到宿主机上。如果不做挂载,一旦容器被删除,所有数据都会丢失。下面介绍如何通过 Docker 挂载数据卷实现 MySQL 数据的持久化。
使用 Docker Volume 挂载(推荐方式)
Docker 原生支持命名数据卷(named volume),这种方式管理方便、可移植性强。
启动 MySQL 容器并挂载数据卷:
docker run -d \ --name mysql-container \ -e MYSQL_ROOT_PASSWORD=your_password \ -v mysql-data:/var/lib/mysql \ -p 3306:3306 \ mysql:8.0
说明:
- -v mysql-data:/var/lib/mysql:创建一个名为 mysql-data 的数据卷,并挂载到容器内的 MySQL 数据目录。
- 该数据卷由 Docker 管理,默认存储在 /var/lib/docker/volumes/mysql-data/_data 路径下。
- 即使容器被删除,只要不手动删除数据卷,数据依然保留。
使用宿主机目录挂载(适合本地开发)
将宿主机的一个实际路径挂载到容器中,便于直接查看和备份数据。
示例命令:
docker run -d \ --name mysql-container \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /my/local/path/mysql-data:/var/lib/mysql \ -p 3306:3306 \ mysql:8.0
注意点:
- 确保宿主机路径 /my/local/path/mysql-data 存在且有读写权限。
- MySQL 容器运行时使用的用户(通常是 mysql)需要对挂载目录有操作权限,否则会启动失败。
- 首次启动会初始化数据文件,后续重启或新建容器挂载同一目录可继续使用原有数据。
在 docker-compose.yml 中配置挂载
使用 docker-compose 可以更清晰地管理服务和卷配置。
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: your_password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
执行 docker-compose up -d 后,Docker 会自动创建名为当前项目目录_mysql-data 的卷。
如果想用宿主机路径:
volumes:
- ./mysql-data:/var/lib/mysql
基本上就这些。选择哪种方式取决于你的部署环境:生产环境建议用命名卷,开发调试可用本地路径挂载,方便查看和清理数据。关键是确保数据目录正确挂载,避免容器一删数据就丢。










