1、具名挂载和匿名挂载
匿名挂载: -v 容器内路径 这个格式也是可以的,也就是不用在“容器内路径“的前面写主机内的路径,就会自动生成一个目录
docker run -d -P --name nginx01 -v /etc/nginx nginx 这里的-P 就是随机映射端口 。这里没有写主机的目录路径。
docker volume ls 查看本地的卷
这里发现数据是这样的:
DRIVER VOLUME NAME
local 4c57a9c19458d4fc5dc8bd626d3e29579c8125472739d537c5523f22f8c7b94e
这就是匿名挂载,没有给volume起名字。在-v的时候只写了容器内的路径,没有写容器外的路径
docker run -d -P --name nginx02 -v lalala-nginx:/etc/nginx nginx
这里的-v lalala-nginx 就是起的名字,注意lalala-nginx前面没有绝对路径/
然后docker volume ls j就可以看到名字了,也就是具名挂载:local lalala-nginx。所以具名挂载格式是 -v 卷名:容器内路径
docker volume inspect 卷名,这个命令可以看到具体的挂载地址
[
{
"CreatedAt": "2021-09-12T22:15:45+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/lalala-nginx/_data",
"Name": "lalala-nginx",
"Options": null,
"Scope": "local"
}
]
Mountpoint就是具体的挂载地址
所以也可以分析出来,所有docker 容器内的卷,在没有指定目录的情况下都是在/var/lib/docker/volumes/卷名/_data下
可以cd 到/var/lib/docker/volumes/下去看看,可以看到所有的卷
最后,因为之前的操作把nginx的配置文件挂载到了lalala-nginx的_data下,所以可以cd进去看看有没有nginx.conf文件
所以通过具名挂载可以方便的找到我们的一个卷,大多数情况使用的也是具名挂载
总结:
挂载的三种方式:
1、匿名挂载 -v 容器内路径
2、具名挂载 -v 卷名:容器内路径 (注意卷名前没有/)
3、指定路径挂载 -v /宿主机路径:容器内路径(注意有明确的宿主机路径)
拓展:
docker run -d -P --name nginx02 -v lalala-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v lalala-nginx:/etc/nginx:rw nginx
ro指的是readonly 只读
rw指的是readwrite 可读可写
如果是ro,说明只能通过宿主机来操作,容器内是无法操作的