docker卷命令-v
和--volumes-from
中使用的两个标志之间的确切区别是什么?在我看来,他们正在做相同的工作,请考虑以下情形。
首先,使用命令创建一个名为myvol
的卷:
$ docker volume create myvol
现在创建并运行一个名为c1
的容器,该容器使用myvol
并进入bash:
$ docker run -it --name c1 -v myvol:/data nginx bash
让我们在容器的已安装目录中创建文件test.txt
的方式为
root@766f90ebcf37:/# touch /data/test.txt
root@766f90ebcf37:/# ls /data
test.txt
-volume
标志:现在创建另一个名为c2
的容器,该容器也使用myvol
:
$ docker run -it --name c2 -v myvol:/data nginx bash
如预期的那样,新生成的容器c2
也可以访问myvol
的所有文件
root@393418742e2c:/# ls /data
test.txt
--volumes-from
做同样的事情使用来自容器c3
的卷创建名为c1
的容器
$ docker run -it --name c3 --volumes-from c1 nginx bash
这将在c3
中产生相同的结果:
root@27eacbe25f92:/# ls /data
test.txt
问题是,如果-v
和--volumes-from
以相同的方式工作,即在容器之间共享数据,那么为什么它们是不同的标志以及--volumes-from
可以做什么-v
无法做到?
答案 0 :(得分:2)
关键是-v和--volumes-from是否以相同的方式工作,即在容器之间共享数据
-v
和--volumes-from
的工作方式不同,但是您可以 在容器之间共享数据。
-volumes-from可以执行-v无法执行的操作吗?
例如它可以连接到另一个容器卷,而无需知道卷的命名方式,并且您无需指定路径。您可以使用:ro
或:rw
之类的权限向容器ID添加后缀。
更多详细信息here-从容器安装卷(--volumes-from)部分
另一个问题是 -v
不能做什么--volumes-from
?
例如。它可以挂载命名卷,可以挂载主机目录或tmpfs(不能在容器之间共享的那个)。在--volume-from
中,您不能直接与主机共享数据。
结论是:--volume
的目的是与主机共享数据。 (here you can find more use cases)。
--volumes-from
的目的是在容器之间共享数据。
他们俩在一起很好。