问题
举例子能说明问题:
docker-compose.yml中的一段代码:
1 | service: |
解决方式
1 | volumes: |
附录:
本文问题的缘由:一开始只是以为顶级volumes的含义只是用来缩写,由于services下
<path1>:<path2>
中的宿主机路径太长,想缩减<path1>:<path2>
的长度,使代码更加美观。实际上对顶级volumes的理解是不对的,顶级volumes的意义并不是为缩写。
实现上述目的应该通过下面方式实现。
1
2
3
4
5
6services:
database:
volumes:
type: bind
source: <path1> # 绝对路径或是相对路径
target: <path2> # 绝对路径或是相对路径
那顶级volume的含义真正是什么?
实际上,顶级volums的含义是指用docker volume create命令创建卷,并交由docker volume管理这些卷,关联容器中的路径。
那本文的一顿操作到底做了些什么?
实际上宿主机卷仍然是由docker volume管理并关联容器中的路径。也就是说,选项
o
和device
只不过是将docker volume管理的卷再次绑定到device
指向的位置docker volume管理的卷截图
可以验证的是:
device
指向的位置、/var/lib/docker/volume/<name>/_data
、容器内的路径,三者的内容是一样的。device
指向的位置截图: docker volume默认的宿主机位置(指向
/var/lib/docker/volumes/<name>/_data
) docker容器内部目录:
来自docker-compose中关于driver_opts的解释:docker-compose driver_opts
引用:以键值对的形式指定用来传递给该数据卷所使用的数据卷驱动的列表选项
1
2
3
4
5
6volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"这里的例子与本文很相似。
所以,本文的意义可能在于将docker volume管理的卷,再克隆一份到其他路径,多处进行持久化。🤔🤔🤔
所以,从一开始理解错了顶级volumes的用法,从而走了弯路。
最后,通过这次经历,我也有些明白了顶级volumes的含义。
参考链接: