容器数据卷
1.什么是容器数据卷
容器数据卷用于解决容器数据持久化和容器间数据共享问题。
应用和运行环境可以打包成镜像,但是数据如果只保存在容器内部,一旦容器被删除,数据也会丢失。
典型场景:
- MySQL容器删除后,数据库数据不能丢失。
- 容器中产生的数据需要同步到宿主机。
- 多个容器之间需要共享同一份数据。
卷技术本质上是目录挂载:把容器内目录挂载到Linux宿主机目录上。

总结:容器数据卷可以实现容器数据持久化、数据同步,也可以实现容器间数据共享。
2.使用数据卷
2.1使用-v挂载目录
命令格式:
bash
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口 镜像名示例:
bash
ubuntu@Mystpet:/home$ docker run -it -v ~/ceshi:/home ubuntu /bin/bash说明:
~/ceshi是宿主机目录。/home是容器内目录。- 如果宿主机中没有
ceshi目录,Docker会自动创建,并且由root用户创建。 - 运行后,宿主机的
~/ceshi目录会和容器内的/home目录关联,二者可以实现文件或数据同步。
2.2查看挂载信息
bash
docker inspect 容器id示例:
bash
ubuntu@Mystpet:/home$ docker inspect b1a
2.3测试文件同步
在宿主机上修改文件,观察容器内文件变化。

再次测试:
1.停止容器。
2.在宿主机上修改文件。
3.重新启动容器。
4.容器内数据依旧保持同步。
好处:
- 以后修改文件只需要在本地修改,容器内会自动同步。
- 即使删除容器,挂载到本地的数据卷也不会丢失,从而实现容器数据持久化。
3.匿名挂载和具名挂载
3.1匿名挂载
匿名挂载只写容器内路径,不指定宿主机路径或卷名。
bash
#1.匿名挂载Nginx配置目录
docker run -d -P --name nginx01 -v /etc/nginx nginx参数说明:
| 参数 | 作用 |
|---|---|
-v /etc/nginx | 只指定容器内路径,属于匿名挂载 |
-P | 随机映射端口 |
查看所有volume:
bash
ubuntu@Mystpet:~$ docker volume ls
DRIVER VOLUME NAME
local 5e5e6e21fa5f59292589a3517f27f6e274ce4ca5f4d02e8ffe53f02adfe040ac
local 7b3c1807fd8293e5724c28845e135464a5544b1ffaadd5d72ea11e94a973bed7这种情况下,-v后面只写了容器内路径,没有写宿主机路径,也没有写卷名,所以Docker会自动生成一个匿名卷。
3.2具名挂载
具名挂载会给数据卷指定名称,方便后续查找和管理。
bash
ubuntu@Mystpet:~$ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx查看容器:
bash
ubuntu@Mystpet:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9638432745cc nginx "/docker-entrypoint.…" 6 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp, [::]:32768->80/tcp nginx02查看volume:
bash
ubuntu@Mystpet:~$ docker volume ls
DRIVER VOLUME NAME
local d22ecba4c4f0237d1ef4395c9e07d87dcfd576cd4d452f38069c13cc786e737d
local juming-nginx查看指定卷详情:
bash
ubuntu@Mystpet:~$ docker volume inspect juming-nginx
[
{
"CreatedAt": "2026-03-22T01:29:26+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]说明:
- 没有指定宿主机目录时,Docker卷默认存放在
/var/lib/docker/volumes/自定义卷名/_data下。 - 如果指定了宿主机目录,
docker volume ls查看不到这个挂载。 - 大多数情况下更推荐使用具名挂载,因为更方便查找和管理。
4.三种挂载方式
bash
#1.匿名挂载
-v 容器内路径
#2.具名挂载
-v 卷名:容器内路径
#3.指定路径挂载
-v /宿主机路径:容器内路径对比:
| 挂载方式 | 写法 | 是否能通过docker volume ls查看 |
|---|---|---|
| 匿名挂载 | -v 容器内路径 | 可以 |
| 具名挂载 | -v 卷名:容器内路径 | 可以 |
| 指定路径挂载 | -v /宿主机路径:容器内路径 | 不可以 |
5.设置读写权限
可以通过ro和rw控制挂载目录的读写权限。
bash
#1.只读挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
#2.可读可写挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx权限说明:
| 权限 | 含义 |
|---|---|
ro | readonly,只读 |
rw | readwrite,可读可写 |
注意:只要看到ro,就说明这个路径只能通过宿主机操作,容器内部无法写入。