文章目录
- [1. 什么是存储卷?](#1. 什么是存储卷?)
-
- [1.1 为什么我们需要存储卷](#1.1 为什么我们需要存储卷)
- [1.2 什么是存储卷](#1.2 什么是存储卷)
- [2. 管理卷 Volume](#2. 管理卷 Volume)
-
- [2.1 创建卷](#2.1 创建卷)
-
- [2.1.1 Volume 命令操作](#2.1.1 Volume 命令操作)
-
- [2.1.1.1 docker volume create](#2.1.1.1 docker volume create)
- [2.1.1.2 docker volume inspect](#2.1.1.2 docker volume inspect)
- [2.1.1.3 docker volume ls](#2.1.1.3 docker volume ls)
- [2.1.1.4 docker volume rm](#2.1.1.4 docker volume rm)
- [2.1.1.5 docker volume prune](#2.1.1.5 docker volume prune)
- [2.1.2 -v 或者--mount 指定](#2.1.2 -v 或者--mount 指定)
-
- [2.1.2.1 -v参数](#2.1.2.1 -v参数)
- [2.1.2.2 --mount 参数](#2.1.2.2 --mount 参数)
-
- [2.1.2.2.1 命名卷](#2.1.2.2.1 命名卷)
- [2.1.2.2.2 匿名卷](#2.1.2.2.2 匿名卷)
- [2.1.3 Dockerfile 匿名卷](#2.1.3 Dockerfile 匿名卷)
- [2.2 操作案例](#2.2 操作案例)
-
- [2.2.1 Docker 命令创建管理卷](#2.2.1 Docker 命令创建管理卷)
- [2.2.2 Docker -v 创建管理卷](#2.2.2 Docker -v 创建管理卷)
- [2.2.3 Docker mount 创建管理卷](#2.2.3 Docker mount 创建管理卷)
- [2.3.4 Docker 卷生命周期](#2.3.4 Docker 卷生命周期)
- [2.3.5 Docker 卷共享](#2.3.5 Docker 卷共享)
1. 什么是存储卷?
1.1 为什么我们需要存储卷
Docker的文件系统叫UnionFS。它由一堆只读层和一个薄薄的可写层组成。只读层(
Image Layers):镜像内容,不可修改可写层 (
writable Layer):容器运行时所有增删改的临时存放地。
实验一:(由于之前做过就不具体写步骤了)
先启动一个 Nginx 容器,然后钻进它的"可写层",把默认网页改掉。
现在,这个 index.html 的新内容就只存在于刚才说的"可写层"里。
假设我们现在执行 docker rm -f web1 强行删除它,刷新浏览器会发现,刚才改的"Hello Docker"不见了,网页回到了初始状态。
这就是容器的"易失性"。数据会随容器的生命周期终结。
如果这不仅是一个网页,而是存放了三年的 MySQL 数据库,这一删数据永久丢失。
这也就是为什么我们要讲存储卷这个东西的原因:
容器需要随时被销毁和重建来保持灵活性,但数据却要求天长地久、永不丢失。
所以,我们需要一种"外挂"机制来保证数据不被丢失。
我们希望可以达到以下四点:
- 数据生命周期
>容器生命周期- 容器间数据可共享
- 容器间数据可互相访问
- 高性能读写(绕过
UnionFS瓶颈)
1.2 什么是存储卷
我们可以把容器想象成一间租来的房子,随时可能被拆迁;而存储卷就像是一个稳固的地下室,房子拆了,数据还在地下室里锁着。
为了实现这种"数据持久化",Docker提供了三种不同的挂载方式,它们在架构和性能上各有千秋。
Volume(docker管理卷):默认映射到宿主机的/var/lib/docker/volumes目录下,只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎daemon自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系。(就像是插入U盘会自动在我的电脑出现插入U盘的盘符,不需要手动进行操作才能让盘符出来)缺陷是用户无法指定那些使用目录,临时存储比较适合。
例如:我有两个容器
mysql和springboot,我想把mysql的存储挂载在一个大的目录下,另一个挂载到别的目录就不行。
Bind Mount(绑定数据卷):映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径,在容器中也需要指定一个特定的路径,两个已知的路径建立关联关系,实际生产使用这个比较多。可以实现不同目录和应用的规划,上面那个实现不了的例子,这个就可以实现。
tmpfs mount(临时数据卷):映射到于宿主机内存中,一旦容器停止运行,tmpfs mounts会被移除,数据就会丢失,用于高性能的临时数据存储。
| 挂载方式 | 存储位置 | 管理权限 | 经典场景 |
|---|---|---|---|
Volume |
Docker专用区 |
Docker引擎 |
数据库,持久化数据 |
Bind Mount |
宿主机任意路径 | 用户/操作系统 | 代码开发,配置同步 |
tmpfs |
宿主机内存 | 内存/内核 | 密码,极速临时缓存 |

2. 管理卷 Volume
2.1 创建卷
存储卷可以通过命令方式创建,也可以在创建容器的时候通过
-v和--mount指定。
2.1.1 Volume 命令操作
| 命令 | 别名 | 功能 | 备注 |
|---|---|---|---|
docker volume create |
创建存储卷 | ||
docker volume inspect |
显示存储卷详细信息 | ||
docker volume ls |
docker volume list |
列出存储卷 | |
docker volume prune |
清理所有无用数据卷 | ||
docker volume rm |
删除卷,使用中的无法删除 |
2.1.1.1 docker volume create
功能:创建存储卷
语法:
java
docker volume create [OPTIONS] [VOLUME]
关键参数:
-d, --driver:指定驱动,默认是local。一般我们不去动他,如果要动的话可以去官网看一下,有相关案例。--label:指定元数据
例子1:创建匿名卷
shell
root@yudukai:~# docker volume create
42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
# 列出存储卷
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf <-----就是这个
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
# 查看卷的详细内容
root@yudukai:~# docker volume inspect 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
[
{
"CreatedAt": "2026-10-08T15:08:13+08:00",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf/_data",
"Name": "42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf",
"Options": null,
"Scope": "local"
}
]
# 查看目录下面有没有内容
root@yudukai:~# ls -l /var/lib/docker/volumes/42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf/_data
total 0
root@yudukai:~#
例子2:创建命名卷
shell
root@yudukai:~# docker volume create myvoltest1
myvoltest1
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
local myvoltest1
root@yudukai:~# docker volume inspect myvoltest1
[
{
"CreatedAt": "2026-10-08T15:19:28+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvoltest1/_data",
"Name": "myvoltest1",
"Options": null,
"Scope": "local"
}
]
root@yudukai:~# ls -l /var/lib/docker/volumes/myvoltest1/_data
total 0
root@yudukai:~#
例子3:指定元数据
shell
root@yudukai:~# docker volume create --label MYTEST=1 myvoltest2
myvoltest2
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
local myvoltest1
local myvoltest2
root@yudukai:~# docker volume inspect myvoltest2
[
{
"CreatedAt": "2026-10-09T08:58:53+08:00",
"Driver": "local",
"Labels": {
"MYTEST": "1"
},
"Mountpoint": "/var/lib/docker/volumes/myvoltest2/_data",
"Name": "myvoltest2",
"Options": null,
"Scope": "local"
}
]
root@yudukai:~# ls -l /var/lib/docker/volumes/myvoltest2/_data
total 0
root@yudukai:~#
2.1.1.2 docker volume inspect
功能:查看卷详细信息
语法:
java
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
关键参数:
-f:指定相应个格式,如json
例子:
java
root@yudukai:~# docker volume inspect myvoltest1 myvoltest2 myvoltest3 myvoltest4
[
{
"CreatedAt": "2026-10-08T15:19:28+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvoltest1/_data",
"Name": "myvoltest1",
"Options": null,
"Scope": "local"
},
{
"CreatedAt": "2026-10-09T08:58:53+08:00",
"Driver": "local",
"Labels": {
"MYTEST": "1"
},
"Mountpoint": "/var/lib/docker/volumes/myvoltest2/_data",
"Name": "myvoltest2",
"Options": null,
"Scope": "local"
},
{
"CreatedAt": "2026-10-09T10:47:25+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvoltest3/_data",
"Name": "myvoltest3",
"Options": null,
"Scope": "local"
},
{
"CreatedAt": "2026-10-09T10:47:29+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvoltest4/_data",
"Name": "myvoltest4",
"Options": null,
"Scope": "local"
}
]
root@yudukai:~#
2.1.1.3 docker volume ls
功能:列出卷
语法:
java
docker volume ls [OPTIONS]
关键参数:
--format:指定相应个格式,如json,table--filter,-f:过滤,目前支持根据lable进行过滤-q:仅显示名称
例子:
shell
root@yudukai:~# docker volume ls --format json
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"com.docker.volume.anonymous=","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5/_data","Name":"1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5","Scope":"local","Size":"N/A","Status":"N/A"}
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"com.docker.volume.anonymous=","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf/_data","Name":"42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf","Scope":"local","Size":"N/A","Status":"N/A"}
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"com.docker.volume.anonymous=","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44/_data","Name":"ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44","Scope":"local","Size":"N/A","Status":"N/A"}
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/myvoltest1/_data","Name":"myvoltest1","Scope":"local","Size":"N/A","Status":"N/A"}
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"MYTEST=1","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/myvoltest2/_data","Name":"myvoltest2","Scope":"local","Size":"N/A","Status":"N/A"}
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/myvoltest3/_data","Name":"myvoltest3","Scope":"local","Size":"N/A","Status":"N/A"}
{"Availability":"N/A","Driver":"local","Group":"N/A","Labels":"","Links":"N/A","Mountpoint":"/var/lib/docker/volumes/myvoltest4/_data","Name":"myvoltest4","Scope":"local","Size":"N/A","Status":"N/A"}
root@yudukai:~# docker volume ls --format table
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
local myvoltest1
local myvoltest2
local myvoltest3
local myvoltest4
root@yudukai:~# docker volume ls -f label=MYTEST
DRIVER VOLUME NAME
local myvoltest2
root@yudukai:~# docker volume ls -q
1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
myvoltest1
myvoltest2
myvoltest3
myvoltest4
root@yudukai:~#
2.1.1.4 docker volume rm
功能:删除卷,需要容器不使用。
语法:
shell
docker volume rm [OPTIONS] VOLUME [VOLUME...]
关键参数:
-f,--force:强制删除
例子:
shell
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
local myvoltest1
local myvoltest2
local myvoltest3
local myvoltest4
root@yudukai:~# docker inspect myvoltest3
[
{
"CreatedAt": "2026-10-09T10:47:25+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvoltest3/_data",
"Name": "myvoltest3",
"Options": null,
"Scope": "local"
}
]
root@yudukai:~# ls -l /var/lib/docker/volumes/myvoltest3/_data
total 0
root@yudukai:~# echo "123" > /var/lib/docker/volumes/myvoltest3/_data/1.txt
root@yudukai:~# ls -l /var/lib/docker/volumes/myvoltest3/_data
total 4
-rw-r--r-- 1 root root 4 Oct 9 11:02 1.txt
root@yudukai:~# docker volume rm myvoltest3 myvoltest4
myvoltest3
myvoltest4
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
local myvoltest1
local myvoltest2
root@yudukai:~# ls -l /var/lib/docker/volumes/myvoltest3/_data
ls: cannot access '/var/lib/docker/volumes/myvoltest3/_data': No such file or directory
root@yudukai:~#
2.1.1.5 docker volume prune
功能:删除不使用的本地卷
语法:
shell
docker volume prune [OPTIONS]
关键参数:
--filter:过滤-f, --force:不提示是否删除,直接强制删除
例子:
shell
root@yudukai:~# docker volume create
20e23df818a91751ba2db2762dd05548980570a56080841f3a00e60bfa8d1e6c
root@yudukai:~# docker volume create myvolumes6
myvolumes6
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
local 20e23df818a91751ba2db2762dd05548980570a56080841f3a00e60bfa8d1e6c
local 42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
local ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
local myvoltest1
local myvoltest2
local myvolumes6
root@yudukai:~# docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
ff090565aa2ce5a2ed03d4789ff006c79d5e06685ab0f3c32cab8905d7c1ea44
1b40b6c51f943d3096fca2a774c655be707e5f5228d6e0b66ab31ac2c11580f5
42ec01ee8a2955c46c92da283c5144a3be2e274c9e3c3989ae70c7779c8adcdf
20e23df818a91751ba2db2762dd05548980570a56080841f3a00e60bfa8d1e6c
Total reclaimed space: 206.9MB
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local myvoltest1
local myvoltest2
local myvolumes6
root@yudukai:~#
2.1.2 -v 或者--mount 指定
-v和-mount都可以完成管理卷的创建
2.1.2.1 -v参数
功能:完成目录映射
语法:
shell
docker run -v name:directory[:options] .........
关键参数:
第一个参数:卷名称
第二个参数:卷映射到容器的目录
第三个参数:选项,如
ro表示readonly,无法修改删除
例子:
shell
root@yudukai:~# docker run -d --name myvolumenginx1 -v volnginx1:/usr/share/nginx/html/ nginx:1.24.0
Unable to find image 'nginx:1.24.0' locally
1.24.0: Pulling from library/nginx
5ac1ebd8aebe: Pull complete
6989106bacf0: Pull complete
c00d1142b331: Pull complete
04e7578caeaa: Pull complete
cb49393af980: Pull complete
57a1056ea484: Pull complete
54247e67c145: Download complete
2f39813903ff: Download complete
Digest: sha256:f6daac2445b0ce70e64d77442ccf62839f3f1b4c24bf6746a857eff014e798c8
Status: Downloaded newer image for nginx:1.24.0
58c31e26b70d7dd738d22dd340bec3bae1965e2d006ce440e3e549f9abaf6e6c
root@yudukai:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." About a minute ago Up About a minute 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 2 weeks ago Up 2 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 2 weeks ago Up 2 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 2 weeks ago Up 2 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 2 weeks ago Up 2 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 5 weeks ago Up 2 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local myvoltest1
local myvoltest2
local myvolumes6
local volnginx1
root@yudukai:~# docker inspect volnginx1
[
{
"CreatedAt": "2026-10-09T11:13:14+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/volnginx1/_data",
"Name": "volnginx1",
"Options": null,
"Scope": "local"
}
]
# 可以看到我们容器里的东西挂载到了我们的宿主机上
root@yudukai:~# ls -l /var/lib/docker/volumes/volnginx1/_data
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
# 然后我们尝试删除容器中的文件
root@yudukai:~# docker exec -it myvolumenginx1 bash
root@58c31e26b70d:/# cd /usr/share/nginx/html/
root@58c31e26b70d:/usr/share/nginx/html# ls -l
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@58c31e26b70d:/usr/share/nginx/html# rm index.html
root@58c31e26b70d:/usr/share/nginx/html# ls -l
total 4
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
root@58c31e26b70d:/usr/share/nginx/html# exit
exit
# 可以看到我们宿主机的文件也被同步删除了
root@yudukai:~# ls -l /var/lib/docker/volumes/volnginx1/_data
total 4
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
root@yudukai:~#
增加ro参数
shell
root@yudukai:~# docker run -d --name myvolumenginx2 -v volnginx2:/usr/share/nginx/html/:ro nginx:1.24.0
a519da96fc9a436b5d62fa867064e49db939c54361aeccc1b64b77c93254447a
root@yudukai:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 6 seconds ago Up 5 seconds 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 6 minutes ago Up 6 minutes 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 2 weeks ago Up 2 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 2 weeks ago Up 2 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 2 weeks ago Up 2 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 2 weeks ago Up 2 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 5 weeks ago Up 2 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local myvoltest1
local myvoltest2
local myvolumes6
local volnginx1
local volnginx2
root@yudukai:~# docker inspect volnginx2
[
{
"CreatedAt": "2026-10-09T11:19:12+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/volnginx2/_data",
"Name": "volnginx2",
"Options": null,
"Scope": "local"
}
]
root@yudukai:~# ls -l /var/lib/docker/volumes/volnginx2/_data
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
# 然后我们尝试删除容器中的文件
root@yudukai:~# docker exec -it myvolumenginx2 bash
root@a519da96fc9a:/# cd /usr/share/nginx/html/
root@a519da96fc9a:/usr/share/nginx/html# ls -l
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
# 发现无法删除容器内文件
root@a519da96fc9a:/usr/share/nginx/html# rm index.html
rm: cannot remove 'index.html': Read-only file system
# 无法新增容器内
root@a519da96fc9a:/usr/share/nginx/html# mkdir a
mkdir: cannot create directory 'a': Read-only file system
root@a519da96fc9a:/usr/share/nginx/html#
root@a519da96fc9a:/usr/share/nginx/html# exit
exit
# 但是退出后可以看到我们可以在宿主机新增文件
root@yudukai:~# cd /var/lib/docker/volumes/volnginx2/_data
root@yudukai:/var/lib/docker/volumes/volnginx2/_data# ls
50x.html index.html
root@yudukai:/var/lib/docker/volumes/volnginx2/_data# rm index.html
root@yudukai:/var/lib/docker/volumes/volnginx2/_data# ls -l
total 4
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
root@yudukai:/var/lib/docker/volumes/volnginx2/_data#
root@yudukai:/var/lib/docker/volumes/volnginx2/_data# docker exec -it myvolumenginx2 bash
root@a519da96fc9a:/# cd /usr/share/nginx/html/
root@a519da96fc9a:/usr/share/nginx/html# ls -l
total 4
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
root@a519da96fc9a:/usr/share/nginx/html#
2.1.2.2 --mount 参数
功能:完成目录映射(绑定卷,存储卷,临时卷)
语法:
shell
--mount '<key>=<value>,<key>=<value>'
关键参数:
type:类型表示bind,volume,or tmpfssource ,src:对于命名卷,这是卷的名称。对于匿名卷,省略此字段。destination,dst,target:文件或目录挂载在容器中的路径ro,readonly:只读方式挂载完成目录映射
例子:
2.1.2.2.1 命名卷
采用 mount 创建 volume
shell
root@yudukai:~# docker images nginx
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
nginx:1.21.1 a05b0cdd4fc1 200MB 53.8MB U
nginx:1.22.0 f0d28f204785 213MB 56.8MB U
nginx:1.22.1 fc5f5fb75747 214MB 57MB
nginx:1.24.0 f6daac2445b0 218MB 60.1MB U
nginx:1.31.4 25ee11a13a12 241MB 66.2MB
nginx:latest cb29e33d254e 253MB 69.2MB U
nginx:trixie-perl a07ae7717013 311MB 79.6MB
nginx@sha256:f1aec5de9d214ab7dad6b67c6665ee9eaa55ac890c710700216804d8b4829802 f1aec5de9d21 151MB 38.4MB
root@yudukai:~# docker run -d --name mynginxvol3 --mount 'src=nginxvol3,dst=/usr/share/nginx/html' nginx:1.24.0
7c2ec835f1270099c85291ea9bebe932f251f58fe4fd8ed18f345965f574871d
root@yudukai:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c2ec835f127 nginx:1.24.0 "/docker-entrypoint...." 6 seconds ago Up 6 seconds 80/tcp mynginxvol3
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 7 weeks ago Up 4 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
通过 docker inspect 可以看到
shell
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local volnginx1
local volnginx2
root@yudukai:~# docker volume inspect nginxvol3
[
{
"CreatedAt": "2026-10-22T16:12:53+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginxvol3/_data",
"Name": "nginxvol3",
"Options": null,
"Scope": "local"
}
]
# 可以看到宿主机也有这个
root@yudukai:~# ls -l /var/lib/docker/volumes/nginxvol3/_data
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:~#
2.1.2.2.2 匿名卷
shell
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local volnginx1
local volnginx2
root@yudukai:~# docker run -d --name mynginxvol4 --mount 'dst=/usr/share/nginx/html' nginx:1.24.0
f6c8f30986c15d2b3bef7cd151b03a75bcae6c248d85851df8c41c02bb0832a9
root@yudukai:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6c8f30986c1 nginx:1.24.0 "/docker-entrypoint...." 3 seconds ago Up 2 seconds 80/tcp mynginxvol4
7c2ec835f127 nginx:1.24.0 "/docker-entrypoint...." 3 minutes ago Up 3 minutes 80/tcp mynginxvol3
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 7 weeks ago Up 4 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local volnginx1
local volnginx2
root@yudukai:~#
可以看到多了一个匿名卷,但是我怎么知道这个匿名卷是这个容器创建的呢?
我们可以查看一下,发现这个容器Mount字段里面的路径是这个匿名卷的名称。之前的命名卷里面也有对应的卷名。

2.1.3 Dockerfile 匿名卷
通过
Dockerfile的VOLUME可以创建docker管理卷。这个我们后续在Dockerfile中详细讲解。我们也可以通过
dockerfile的VOLUME指令在镜像中创建DataVolume,这样只要通过该镜像创建的容器都会存在挂载点,但值得注意的是通过VOLUME指令创建的挂载点,无法指定主机上对应的目录,而是由docker随机生成的。
2.2 操作案例
2.2.1 Docker 命令创建管理卷
我们来看一下,在容器中创建管理卷后,在宿主机上更改或者删除,容器中对应的内容会不会动态的发生变化。
- 命令创建管理卷
shell
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local volnginx1
local volnginx2
root@yudukai:~# docker volume create test1
test1
# 可以看到新增了新的test1这个卷
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local volnginx1
local volnginx2
root@yudukai:~# docker volume inspect test1
[
{
"CreatedAt": "2026-10-22T16:30:13+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/test1/_data",
"Name": "test1",
"Options": null,
"Scope": "local"
}
]
# 可以看到里面是空的
root@yudukai:~# ls -l /var/lib/docker/volumes/test1/_data
total 0
root@yudukai:~#
- 创建容器
shell
root@yudukai:~# docker images nginx
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
nginx:1.21.1 a05b0cdd4fc1 200MB 53.8MB U
nginx:1.22.0 f0d28f204785 213MB 56.8MB U
nginx:1.22.1 fc5f5fb75747 214MB 57MB
nginx:1.24.0 f6daac2445b0 218MB 60.1MB U
nginx:1.31.4 25ee11a13a12 241MB 66.2MB
nginx:latest cb29e33d254e 253MB 69.2MB U
nginx:trixie-perl a07ae7717013 311MB 79.6MB
nginx@sha256:f1aec5de9d214ab7dad6b67c6665ee9eaa55ac890c710700216804d8b4829802 f1aec5de9d21 151MB 38.4MB
root@yudukai:~# docker run -d --name mynginx1 -p 8052:80 -v test1:/usr/share/nginx/html nginx:1.24.0
863b01ad92dd17bad6ee022a865fc23e4f4f93b14cec91b63685084b82f1c0c9
root@yudukai:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
863b01ad92dd nginx:1.24.0 "/docker-entrypoint...." 7 seconds ago Up 7 seconds 0.0.0.0:8052->80/tcp, [::]:8052->80/tcp mynginx1
f6c8f30986c1 nginx:1.24.0 "/docker-entrypoint...." 18 minutes ago Up 18 minutes 80/tcp mynginxvol4
7c2ec835f127 nginx:1.24.0 "/docker-entrypoint...." 21 minutes ago Up 21 minutes 80/tcp mynginxvol3
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 7 weeks ago Up 4 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
root@yudukai:~# ls -l /var/lib/docker/volumes/test1/_data
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:~#
- 我们尝试修改一下宿主机的文件,看看会不会发生对应的变化
先看一下浏览器

shell
root@yudukai:~# cd /var/lib/docker/volumes/test1/_data
root@yudukai:/var/lib/docker/volumes/test1/_data# vim index.html
root@yudukai:/var/lib/docker/volumes/test1/_data#
可以发现,确实改变了

- 我们进入容器,看看里面有没有动态变化
shell
root@yudukai:/var/lib/docker/volumes/test1/_data# docker exec -it mynginx1 bash
root@863b01ad92dd:/# cd /usr/s
sbin/ share/ src/
root@863b01ad92dd:/# cd /usr/share/nginx/html/
root@863b01ad92dd:/usr/share/nginx/html# ll
bash: ll: command not found
root@863b01ad92dd:/usr/share/nginx/html# dir
50x.html index.html
root@863b01ad92dd:/usr/share/nginx/html# cat index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to docker volume create cmd nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@863b01ad92dd:/usr/share/nginx/html#
可以看到确实是发生了变化的
- 停止容器释放空间
shell
docker stop nginx1
docker rm nginx1
结论:宿主机和容器之间数据是同步的。
2.2.2 Docker -v 创建管理卷
-v创建管理卷,并且启动容器
shell
root@yudukai:/var/lib/docker/volumes/test1/_data# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local volnginx1
local volnginx2
root@yudukai:/var/lib/docker/volumes/test1/_data# docker run -d --name mynginx2 -v test2:/usr/share/nginx/html/:ro -p 8052:80 nginx:1.24.0
954c670bbbeaef52e1782e27c494878330d24ecef281aec2e589a02116f43ca9
root@yudukai:/var/lib/docker/volumes/test1/_data# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local volnginx1
local volnginx2
root@yudukai:/var/lib/docker/volumes/test1/_data# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
954c670bbbea nginx:1.24.0 "/docker-entrypoint...." 11 seconds ago Up 11 seconds 0.0.0.0:8052->80/tcp, [::]:8052->80/tcp mynginx2
f6c8f30986c1 nginx:1.24.0 "/docker-entrypoint...." 2 hours ago Up 2 hours 80/tcp mynginxvol4
7c2ec835f127 nginx:1.24.0 "/docker-entrypoint...." 2 hours ago Up 2 hours 80/tcp mynginxvol3
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 7 weeks ago Up 4 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
- 进入卷目录
shell
root@yudukai:/var/lib/docker/volumes/test1/_data# docker inspect test2
[
{
"CreatedAt": "2026-10-22T17:54:52+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/test2/_data",
"Name": "test2",
"Options": null,
"Scope": "local"
}
]
root@yudukai:/var/lib/docker/volumes/test1/_data# ls -l /var/lib/docker/volumes/test2/_data
total 8
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:/var/lib/docker/volumes/test1/_data#
- 修改
index.html,容器中修改提示无法修改
shell
root@yudukai:/var/lib/docker/volumes/test1/_data# docker exec -it mynginx2 bash
root@954c670bbbea:/# cd /usr/share/nginx/html
root@954c670bbbea:/usr/share/nginx/html# dir
50x.html index.html
root@954c670bbbea:/usr/share/nginx/html# echo "Hello ydk from test2" > index.html
bash: index.html: Read-only file system
root@954c670bbbea:/usr/share/nginx/html# rm index.html
rm: cannot remove 'index.html': Read-only file system
root@954c670bbbea:/usr/share/nginx/html#
- 宿主机修改,并浏览器查看
shell
root@yudukai:/var/lib/docker/volumes/test1/_data# cd /var/lib/docker/volumes/test2/_data
root@yudukai:/var/lib/docker/volumes/test2/_data# ll
total 16
drwxr-xr-x 2 root root 4096 Oct 22 17:54 ./
drwx-----x 3 root root 4096 Oct 22 17:54 ../
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:/var/lib/docker/volumes/test2/_data# echo "Hello ydk from test2" > index.html
root@yudukai:/var/lib/docker/volumes/test2/_data# cat index.html
Hello ydk from test2
root@yudukai:/var/lib/docker/volumes/test2/_data#

我们顺便去容器中看看容器内的变化
shell
root@yudukai:/var/lib/docker/volumes/test2/_data# docker exec -it mynginx2 bash
root@954c670bbbea:/# cd /usr/share/nginx/html
root@954c670bbbea:/usr/share/nginx/html# cat index.html
Hello ydk from test2
root@954c670bbbea:/usr/share/nginx/html#
可以看到容器内也同步变化了。
- 清理释放空间
shell
docker stop mynginx2
docker rm mynginx2
结论:指定
ro的话宿主机可以修改,但是容器里面无法修改
2.2.3 Docker mount 创建管理卷
mount创建管理卷,并且启动容器
shell
root@yudukai:/var/lib/docker/volumes/test2/_data# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local volnginx1
local volnginx2
root@yudukai:/var/lib/docker/volumes/test2/_data# docker run -d --name mynginx3 -p 8052:80 --mount src=test3,dst=/usr/share/nginx/html/ nginx:1.24.0
76360ef579639f37af45a74b5a5101a0f3b39835923c03353fb49b8e7e2001d5
- 查看卷创建成功
shell
# 多了test3这个卷
root@yudukai:/var/lib/docker/volumes/test2/_data# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local test3
local volnginx1
local volnginx2
root@yudukai:/var/lib/docker/volumes/test2/_data# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76360ef57963 nginx:1.24.0 "/docker-entrypoint...." 22 seconds ago Up 21 seconds 0.0.0.0:8052->80/tcp, [::]:8052->80/tcp mynginx3
f6c8f30986c1 nginx:1.24.0 "/docker-entrypoint...." 2 hours ago Up 2 hours 80/tcp mynginxvol4
7c2ec835f127 nginx:1.24.0 "/docker-entrypoint...." 2 hours ago Up 2 hours 80/tcp mynginxvol3
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 7 weeks ago Up 4 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
root@yudukai:/var/lib/docker/volumes/test2/_data#
- 查看卷挂载点。
shell
root@yudukai:/var/lib/docker/volumes/test2/_data# docker volume inspect test3
[
{
"CreatedAt": "2026-10-22T18:23:12+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/test3/_data",
"Name": "test3",
"Options": null,
"Scope": "local"
}
]
root@yudukai:/var/lib/docker/volumes/test2/_data#
- 浏览器查看

- 宿主机上修改文件内容
shell
root@yudukai:/var/lib/docker/volumes/test3/_data# vim index.html
root@yudukai:/var/lib/docker/volumes/test3/_data# cat index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to volum create by mount nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@yudukai:/var/lib/docker/volumes/test3/_data#
- 查看页面

- 清理释放空间
shell
docker stop mynginx3
docker rm mynginx3
结论:mount 创建的卷数据也会完成同步。
2.3.4 Docker 卷生命周期
- 先创建一个容器,然后把他的浏览器首页绑定到
nginx上- 然后把容器删掉,看看宿主机上对应的文件有没有消失。
- 如果容器还存在就
docker rm来删除一下
-v创建管理卷,并且启动容器
shell
root@yudukai:/var/lib/docker/volumes/test3/_data# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local test3
local volnginx1
local volnginx2
root@yudukai:/var/lib/docker/volumes/test3/_data# docker run -d -v test4:/usr/share/nginx/html --name mynginx4 -p 8052:80 nginx:1.24.0
1a0ebc5cc6b8db8145e331ca58fd5bca1a1d9e71addfb89e98c9f1c39b23ba25
root@yudukai:/var/lib/docker/volumes/test3/_data# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local test3
local test4
local volnginx1
local volnginx2
root@yudukai:/var/lib/docker/volumes/test3/_data# docker inspect mynginx4
......
"Mounts": [
{
"Type": "volume",
"Name": "test4",
"Source": "/var/lib/docker/volumes/test4/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
......
- 进入卷目录,注意此时可以看到容器里面的内容自动的放到了宿主机里面。
shell
root@yudukai:~# cd /var/lib/docker/volumes/test4/_data
root@yudukai:/var/lib/docker/volumes/test4/_data# ll
total 16
drwxr-xr-x 2 root root 4096 Oct 22 18:40 ./
drwx-----x 3 root root 4096 Oct 22 18:40 ../
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:/var/lib/docker/volumes/test4/_data#
- 删除容器
shell
root@yudukai:/var/lib/docker/volumes/test4/_data# docker stop mynginx4
mynginx4
root@yudukai:/var/lib/docker/volumes/test4/_data# docker rm mynginx4
mynginx4
root@yudukai:/var/lib/docker/volumes/test4/_data# docker ps -a |grep mynginx4
root@yudukai:/var/lib/docker/volumes/test4/_data#
- 浏览器查看

- 再次查看卷里面的内容,进入卷目录查看可以看到文件并没有被删除
shell
root@yudukai:/var/lib/docker/volumes/test4/_data# ll
total 16
drwxr-xr-x 2 root root 4096 Oct 22 18:40 ./
drwx-----x 3 root root 4096 Oct 22 18:40 ../
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:/var/lib/docker/volumes/test4/_data#
- 删除卷,可以看到我们的卷被删除掉了。
shell
root@yudukai:/var/lib/docker/volumes/test4/_data# docker volume rm test4
test4
root@yudukai:/var/lib/docker/volumes/test4/_data# ll
total 0
root@yudukai:/var/lib/docker/volumes/test4/_data#
总结:不删除卷只删除主机就不会删除宿主机的内容,把卷也删掉,那么宿主机对应的内容也会消失。
2.3.5 Docker 卷共享
实际上绑定就是指向一个位置,宿主机一改变文件,那么多个共享的容器对应的内容都会改变。
-v创建管理卷,并且启动3容器,指定同一个卷
shell
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local test3
local volnginx1
local volnginx2
root@yudukai:~docker run -d --name mynginx51 -p 8052:80 -v test4:/usr/share/nginx/html/ nginx:1.24.0
233fff94734b6e512c054d6222a5ca04cabe464785152959936caefb5bc2fadd
root@yudukai:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
233fff94734b nginx:1.24.0 "/docker-entrypoint...." 8 seconds ago Up 7 seconds 0.0.0.0:8052->80/tcp, [::]:8052->80/tcp mynginx51
f6c8f30986c1 nginx:1.24.0 "/docker-entrypoint...." 3 hours ago Up 3 hours 80/tcp mynginxvol4
7c2ec835f127 nginx:1.24.0 "/docker-entrypoint...." 3 hours ago Up 3 hours 80/tcp mynginxvol3
a519da96fc9a nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx2
58c31e26b70d nginx:1.24.0 "/docker-entrypoint...." 13 days ago Up 13 days 80/tcp myvolumenginx1
58109926ba0a nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx004
c9e86c4f9bf3 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp mynginx003
c42b26328912 nginx:1.22.0 "/docker-entrypoint...." 4 weeks ago Up 4 weeks 0.0.0.0:8180->80/tcp, [::]:8180->80/tcp mynginx001
8c523baaa860 nginx "/docker-entrypoint...." 4 weeks ago Up 4 weeks 80/tcp boring_torvalds
ea63b99ba74d nginx:1.21.1 "/docker-entrypoint...." 7 weeks ago Up 4 weeks 0.0.0.0:81->80/tcp, [::]:81->80/tcp mywebsite2
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local test3
local test4
local volnginx1
local volnginx2
root@yudukai:~# docker run -d --name mynginx52 -p 8080:80 -v test4:/usr/share/nginx/html/ nginx:1.24.0
cf5846d8e1f77319b6bfaf0407155d2d43d58f9a4e4ea0fd1bac92670c3544e3
root@yudukai:~# docker run -d --name mynginx53 -p 8051:80 -v test4:/usr/share/nginx/html/ nginx:1.24.0
8f64ea40a180a474354cd7d7836bf5bf1173dd5ad85a8d8f789627ba556fd9a5
root@yudukai:~# docker volume ls
DRIVER VOLUME NAME
local 6ffa9466a74465340029138e0147565af2d44833c8ffee1e45ced4aa384e8c09
local myvoltest1
local myvoltest2
local myvolumes6
local nginxvol3
local test1
local test2
local test3
local test4
local volnginx1
local volnginx2
root@yudukai:~#
- 进入卷目录
shell
root@yudukai:~# docker inspect test4
[
{
"CreatedAt": "2026-10-22T19:31:25+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/test4/_data",
"Name": "test4",
"Options": null,
"Scope": "local"
}
]
root@yudukai:~# cd /var/lib/docker/volumes/test4/_data
root@yudukai:/var/lib/docker/volumes/test4/_data# ll
total 16
drwxr-xr-x 2 root root 4096 Oct 22 19:31 ./
drwx-----x 3 root root 4096 Oct 22 19:31 ../
-rw-r--r-- 1 root root 497 Apr 11 2023 50x.html
-rw-r--r-- 1 root root 615 Apr 11 2023 index.html
root@yudukai:/var/lib/docker/volumes/test4/_data#
- 修改
index.html
shell
root@yudukai:/var/lib/docker/volumes/test4/_data# echo "Hello ydk from share volume" > index.html
root@yudukai:/var/lib/docker/volumes/test4/_data# cat index.html
Hello ydk from share volume
root@yudukai:/var/lib/docker/volumes/test4/_data#
- 浏览器查看,可以看到三个都是一样的首页
下面这个8080的图标变了是因为我直接用了之前springboot的端口,不用在意。



- 进入容器查看
shell
root@yudukai:~# docker exec -it mynginx51 bash
root@233fff94734b:/# cd /usr/share/nginx/html
root@233fff94734b:/usr/share/nginx/html# cat index.html
Hello ydk from share volume
root@233fff94734b:/usr/share/nginx/html#
- 清理释放空间
shell
docker stop mynginx51 mynginx52 mynginx53
docker rm mynginx51 mynginx52 mynginx53