我已经搜索了site:stackoverflow.com docker: can volume be mounted?
,并且肯定有很多关于该操作的帖子。但是,我担心当前在网络docker文档上发布的恕我直言内部矛盾(他们每个人都没有给您提供邮政日期),并问谁能确定哪一种是当前正确的说法以及docker演变路径在哪里: / p>
https://docs.docker.com/storage/bind-mounts/:
自Docker诞生以来,便已出现绑定挂载。绑定 与卷相比,挂载的功能有限。
https://docs.docker.com/storage/volumes/
卷是用于持久保存由...生成的数据的首选机制 并由Docker容器使用。虽然绑定挂载取决于 主机的目录结构,卷完全 由Docker管理。
https://docs.docker.com/engine/reference/run/
-v,--volume = [host-src:] container-dest [:]:绑定安装卷。
当引用上方的两个链接试图将bind mounts
与volumes
分开时,混乱来自于第三引号“绑定安装卷”。
由于--volume
和--mount
的{{1}}和run
参数都可同时用于bind mounts
和volumes
(和{{1 }} btw)及其用法的说明包括这两种情况。
正确的说法是什么?我们可以使用tmpfs
还是只使用mount a volume
?
已添加:
我发现在挂载卷上有一种“合法”用法:在create volume
标志中(创建一个用于挂载该卷的新容器),但不适用于“陈旧”的--volumes-from
。
答案 0 :(得分:1)
我们可以只使用
mount a volume
还是只使用create volume
?
因为它们是两个单独的操作,所以实际上两者都可以使用。造成混淆的部分原因可能是volumes
同时描述了源和目标。您在docker引擎中创建了一个存储卷,然后将该卷安装在容器中。
如果您提供的源是文件系统上的路径,则说明您正在将容器绑定安装在容器中。
您正在关注-v
的{{1}}选项。它的实际作用是:
docker run
与之类似,不同之处在于将存在卷,因为一个容器已经在其中安装了卷,因此必须在一个点上创建它们(或者在绑定安装的情况下存在)
要更好地理解,请参见以下情形:
首先,您手动创建一个卷。
--volumes-from
现在您可以将现有的存储卷挂载到容器中并向其中推入一些东西
$ docker volume create testSO
testSO
$ docker volume ls
DRIVER VOLUME NAME
local testSO
我以前的容器现在已经死了,但是我的存储空间仍然存在。我可以将其重新安装在新容器上并读取数据
$ docker run -it --rm -v testSO:/testSO busybox:latest
/ # echo "I'm a test for SO" > /testSO/test.txt
/ # exit
现在让我们删除存储卷:
$ docker volume ls
DRIVER VOLUME NAME
local testSO
$ docker run -it --rm -v testSO:/testSO ubuntu:18.04
root@d558687a3f6f:/# more /testSO/test.txt
I'm a test for SO
root@d558687a3f6f:/# exit
exit
如果您启动一个安装了旧卷名的新容器,则将重新创建该容器并将其全部安装在一起(但它当然是空的)
$ docker volume rm testSO
testSO
$ docker volume ls
DRIVER VOLUME NAME
希望我能澄清一下。