Docker 数据持久化:Volume 和 Bind Mount 的区别详解
·
1. 卷(Volume)
-
定义:由 Docker 自己管理的存储区域,保存在宿主机的
/var/lib/docker/volumes/下。 -
特点:
- 与容器解耦,生命周期独立(容器删掉,卷不会丢失,除非显式删除)。
- 更适合生产环境,因为 Docker 会帮你处理权限、存储路径。
- 可以跨容器共享。
-
用法:
docker run -d \ -v myblog_mysql-data:/var/lib/mysql \ mysql:8.0mysql-data是卷名,如果不存在会自动创建。- 卷的存放目录

2. 目录挂载(Bind Mount)
-
定义:把宿主机上的某个目录,直接映射到容器内。
-
特点:
- 宿主机和容器实时同步,方便调试和开发。
- 路径必须存在,否则可能报错或自动创建空目录。
- 不太适合跨机器迁移,因为依赖于宿主机的目录结构。
-
用法:
docker run -d \ -v /app/myconf:/etc/mysql/conf.d \ mysql:8.0/app/myconf是宿主机目录,/etc/mysql/conf.d是容器目录。
3. 区别总结
| 特性 | 卷 (Volume) | 目录挂载 (Bind Mount) |
|---|---|---|
| 管理方式 | Docker 自己管理 | 依赖宿主机目录 |
| 生命周期 | 容器删除后仍存在 | 目录是否存在取决于宿主机 |
| 可移植性 | 高(只需要卷名) | 低(路径固定) |
| 使用场景 | 数据持久化、跨容器共享 | 本地开发、测试、调试 |
4. 混合使用的典型例子
在 MySQL + WordPress 里常见:
services:
mysql:
image: mysql:8.0
volumes:
- myblog_mysql-data:/var/lib/mysql # 卷:持久化数据
- ./myconf:/etc/mysql/conf.d # 挂载:加载自定义配置
- 卷存放数据库数据,避免丢失。
- 挂载把本地配置文件直接注入容器,方便修改调试。
5. 如何找 Docker 官方镜像持久化目录
1. MySQL
官方说明:MySQL 的数据文件默认存放在 /var/lib/mysql。
2. Redis
Redis 的数据默认存放在 /data。
更多推荐



所有评论(0)