Volume 与 Bind Mount
约 794 字大约 3 分钟
布欧-Lewyon
2026-05-15
首页 › Docker › 数据持久化(在新窗口打开) › Volume 与 Bind Mount
容器默认是"无状态"的——删除容器后,其文件系统的所有变更都会丢失。数据持久化方案让数据在容器生命周期之外保留。
三种持久化方式
| 方案 | 持久性 | 适用场景 |
|---|---|---|
| Volume | ✅ 持久保留 | 数据库、配置文件、生产环境 |
| Bind Mount | ✅ 持久保留 | 开发热重载、配置注入 |
| tmpfs | ❌ 容器删除后丢失 | 临时缓存、敏感数据(密码文件) |
Volume(推荐)
Volume 由 Docker 管理,存储在 /var/lib/docker/volumes/ 中。
# 创建卷
docker volume create mydata
# 查看卷
docker volume ls
docker volume inspect mydata
# 挂载卷到容器
docker run -d -v mydata:/app/data --name app myapp
# 如果不指定卷名,Docker 自动创建匿名卷
docker run -d -v /app/data --name app myapp
# 删除卷
docker volume rm mydata
# 清理未使用的卷
docker volume pruneVolumes 的优势:
- Docker 管理,无需关心具体路径。
- 支持卷驱动(如 NFS、云存储驱动),可跨宿主机共享。
- 多个容器可同时挂载同一个卷。
- 备份和恢复更方便。
Bind Mount
将宿主机上的指定目录/文件挂载到容器中。
# 挂载源码目录(开发热重载)
docker run -d \
-v /host/project/src:/app/src \
-p 3000:3000 \
node:20-alpine \
npm run dev
# 挂载配置文件
docker run -d \
-v /host/config/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
nginx:alpine
# 使用 --mount 语法(更明确)
docker run -d \
--mount type=bind,source=/host/data,target=/app/data,readonly \
nginx路径注意事项
# 宿主机路径必须是绝对路径
docker run -v ./data:/app/data myapp # 相对路径在某些系统上可能不工作
docker run -v $(pwd)/data:/app/data myapp # ✅ 用 $PWD
# 挂载单个文件
docker run -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginx权限问题
Bind Mount 保留宿主机文件的权限。容器内用户 UID 可能与宿主机不同:
# 挂载后容器内 ls -la 看到的是宿主机的 UID/GID
docker run --user 1000:1000 -v $(pwd)/data:/data alpine ls -la /dataVolume vs Bind Mount
| 对比 | Volume | Bind Mount |
|---|---|---|
| 管理方式 | Docker 管理 | 用户管理 |
| 性能 | 原生 | 原生(Linux) |
| 跨宿主机 | 支持卷驱动 | 不支持 |
| 路径指定 | 名称(如 mydata) | 绝对路径(如 /host/path) |
| 适用场景 | 生产环境数据持久化 | 开发环境、配置注入 |
备份与恢复 Volume
# 备份
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
tar czf /backup/mydata-backup.tar.gz -C /data .
# 恢复
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
tar xzf /backup/mydata-backup.tar.gz -C /data小结
- Volume 由 Docker 管理,适合生产环境持久化数据(数据库、应用数据)。
- Bind Mount 将宿主机路径映射到容器,适合开发热重载和配置注入。
- 语法:
-v 源:目标:选项,选项ro表示只读。 --mount语法更明确但稍长,是可选的等价方式。- Volume 通过临时容器打包备份,Bind Mount 直接操作宿主机文件即可备份。
上一节:镜像瘦身 下一节:tmpfs 临时挂载
