Docker Volume 实现数据持久化挂载,核心是将容器内路径绑定到 Docker 托管的独立存储空间,确保数据脱离容器生命周期而长期存在。

用 Docker Volume 实现数据持久化挂载,核心是把容器内路径绑定到 Docker 托管的独立存储空间,让数据脱离容器生命周期。只要卷没被手动删掉,容器删了、重启了、重部署了,数据都在。
创建命名卷并挂载(生产推荐)
这是最稳妥、可追溯、易协作的方式:
- 先创建卷:docker volume create app_data
- 启动容器时挂载:docker run -v app_data:/var/www/html nginx:alpine
- 卷实际路径由 Docker 自动管理(如 /var/lib/docker/volumes/app_data/_data),你不用找、也不该直接操作
- 多个容器可同时挂载同一名字的卷,实现读写共享
启动时自动创建卷(适合测试或轻量场景)
省去 create 步骤,Docker 在首次挂载时自动建卷:
- 匿名卷(ID 随机):docker run -v /data redis —— 容器删了还能查 ID,但名字难记
- 命名卷(更清晰):docker run -v logs_volume:/var/log/myapp alpine —— 卷名明确,后续 docker volume ls 一眼可见
- 注意:如果该卷已存在且有数据,容器内对应路径的内容会被隐藏(不是覆盖)
用 --mount 替代 -v(语法更安全、功能更全)
Docker 官方推荐,尤其适合设权限、只读或对接驱动:
- 基础挂载:docker run --mount source=cache_vol,target=/tmp/cache nginx
- 只读限制:--mount source=config_vol,target=/etc/app,readonly
- 指定用户权限(避免容器内进程因 UID 不匹配无法写入):--mount source=data_vol,target=/data,uid=1001,gid=1001
- 服务编排中(如 docker swarm)只支持 --mount,不支持 -v
验证和日常检查不能跳过
挂载成功≠数据真在持久化,动手确认才放心:
- 列出现有卷:docker volume ls
- 查物理路径和状态:docker volume inspect app_data
- 进容器验证可写:docker exec -it myapp sh -c "echo test > /var/www/html/test.txt"
- 删容器再起一个同名卷的新容器,检查 test.txt 是否还在


















