docker volume create 是什么
docker volume create 用于预先创建命名数据卷。命名卷由 Docker 管理,存放在宿主机的卷目录里,与容器生命周期解耦:容器删除后卷仍然保留。它有两个容易误解的行为——重复创建同名卷不会报错也不会清空数据,而是直接返回原卷;容器首次挂载一个空命名卷时,Docker 会把镜像中该路径下已有的内容复制进卷里完成初始化。
基本信息
| 语法 | docker volume create [选项] [卷名] |
|---|---|
| 驱动选项 | -d local;--opt type=nfs 等可挂载 NFS 或指定宿主路径 |
| 复用行为 | 同名卷已存在时直接返回,存量数据原样保留 |
| 归属 | 卷是独立的 Docker 对象,不属于任何容器 |
| 权限要求 | 卷目录在宿主上通常属 root,非 root 运行容器需先处理属主 |
典型使用场景
- 数据库数据目录持久化:MySQL、PostgreSQL 的数据目录必须落在卷上
- 多个容器共享同一份配置或数据,用命名卷替代互相拷贝
- NFS 卷让多台宿主机共享数据,适配跨节点部署的中间件
- 把卷作为交付单元做备份与迁移:打包卷比打包容器可靠
- 开发环境隔离数据:容器随便重建,数据始终保留在卷里
创建与使用
创建与使用
docker volume create appdata
docker run -d --name web -v appdata:/usr/share/nginx/html nginx:1.27
docker volume inspect -f "{{.Mountpoint}}" appdata # 查看宿主上的实际路径
docker volume ls -f dangling=true # 找出没被任何容器使用的卷,供清理前确认NFS 类型卷示例
NFS 类型卷示例
docker volume create -d local \
--opt type=nfs \
--opt o=addr=10.0.0.10,rw,nfsvers=4 \
--opt device=:/exports/data \
nfsdata挂载方式对比
| 类型 | 创建方式 | 适用场景 |
|---|---|---|
| 命名卷 | docker volume create 或自动创建 | 持久数据,推荐方式,位置由 Docker 管理 |
| 匿名卷 | -v /data(不写卷名)自动生成 | 临时数据,容易遗留成无人认领的卷 |
| 绑定挂载 | -v /host/path:/container/path | 开发环境、宿主配置文件注入 |
| NFS 卷 | -d local --opt type=nfs | 多宿主机共享同一份数据 |
容器默认以 root 写入卷,宿主上的卷目录属主也是 root。用 -u 指定非 root 用户运行容器时,需要先 chown 修正属主(可以用一次性容器完成),否则报 Permission denied。
匿名卷在容器删除后不会自动清理,长期运行会慢慢占满磁盘。定期用 docker volume ls -f dangling=true 普查,但删除前要确认没有已停止的容器仍在引用该卷。