docker卷(volume)映射是最常用、最可靠的数据持久化方式,由docker管理、独立于容器生命周期,支持跨容器共享与备份;绑定挂载则适用于需指定宿主机路径或已有数据的场景,但需手动处理权限与可移植性问题。

直接用 Docker 卷(volume)映射是最常用、最可靠的方式,它不依赖容器生命周期,数据独立持久,还能灵活扩容。关键不是“给容器扩容”,而是把需要大空间的目录挂载到一个可管理、可替换、可备份的卷上。
创建并使用命名卷(推荐方式)
命名卷由 Docker 管理,自动存放在 /var/lib/docker/volumes/ 下,支持跨容器共享,也便于后续迁移或备份。
- 创建一个名为
app-data的卷:docker volume create app-data - 启动容器时挂载该卷到应用路径(例如
/var/www/html):docker run -d -v app-data:/var/www/html --name web nginx - 此时容器内所有写入
/var/www/html的数据,实际都落在宿主机的卷目录中,不受容器重启或重建影响
挂载宿主机目录(适合已有数据或需精细控制)
当你已有大量数据、或需要指定磁盘分区(如 SSD 或大容量 HDD)、或希望直接用 df -h 查看剩余空间时,绑定挂载更直观。
- 确保宿主机目标路径存在且权限正确(例如
/data/myapp):mkdir -p /data/myapp && chown 1001:1001 /data/myapp(UID/GID 匹配容器内用户) - 运行容器时绑定挂载:
docker run -d -v /data/myapp:/app/storage --name app-server my-image - 后续扩容只需清理或扩展宿主机该目录所在文件系统(如 LVM 扩容、换挂载点),无需动容器配置
为卷设置大小限制(可选但实用)
Docker 原生命名卷不自带配额,但可通过底层驱动实现。最常用的是 tmpfs(内存卷,适合缓存)或借助 local 驱动 + ext4 子卷做隔离。
- 创建一个最大 5GB 的内存卷(仅限临时高速读写):
docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=5G app-cache - 若需磁盘级配额,建议在宿主机层面管理:用
dd创建固定大小的 ext4 镜像文件,挂载为 loop 设备,再挂载进容器——这样既可控又兼容所有存储后端
动态更换更大存储卷(不停机迁移)
对正在运行的容器,不能直接“扩容卷”,但可以无缝切换到更大容量的新卷。
- 新建大容量卷:
docker volume create app-data-v2 - 用临时容器把旧数据复制过去:
docker run --rm -v app-data:/from -v app-data-v2:/to alpine cp -a /from/. /to/ - 停旧容器,启新容器挂载新卷:
docker stop web && docker rm webdocker run -d -v app-data-v2:/var/www/html --name web nginx - 验证后,可安全删除旧卷:
docker volume rm app-data











