容器#1使用为/data
定义的卷运行,我想使用运行选项--volumes-from
将此卷装载到另一个容器,但我想更改路径为第二个容器。
换句话说,来自容器#1的/data
应该安装到容器#2内的/custom/data
。
这可能吗?有解决方案吗?
谢谢!
答案 0 :(得分:2)
目前无法向--volumes-from
添加自定义选项。
有两种可能的解决方案。然而,两者都不完美......
解决方案1
就个人而言,我不喜欢这个,因为它只适用于Linux。它不适用于Boot2Docker。 How to map volume paths using Docker's --volumes-from?
解决方案2
第二种解决方案是使用sym-link。这非常好,但最后有一个警告。
运行具有交互式shell的docker容器和容器#1中的卷; busybox是理想的:
docker run --rm -it --volumes-from container-1-name busybox
其中container-1-name
是容器#1的名称。
在打开的shell中,您可以创建一个从/custom/data
到/data
的符号链接。假设/custom
的根已经存在(如果没有,则首先使用mkdir
),输入:
ln -s /data /custom/data
现在您可以检查此链接是否存在。你应该看到这样的东西:
/ # ls -l custom/
total 0
lrwxrwxrwx 1 root root 5 Mar 4 08:09 data -> /data
然后你完成了这个容器。出口。现在,如果您创建的新容器不是使用--volumes-from container-1-name
,则可以通过/data
访问/custom/data
的内容。
警告:您应该注意使用--volumes-from container-1-name
的容器同时包含/data
和/custom/data
。使用此解决方案无法解决问题。在大多数情况下,我想这很好。但是,如果这对您没有好处,您将需要找到另一种解决方案。
答案 1 :(得分:0)
为什么要使用--volumes-from
?
您可以使用:
docker run -d -v DataVolume1:/path1 --name container1 image1:v1.0.0
docker run -d -v DataVolume1:/path2 --name container2 image2:v1.0.0
或更好的--mount
而非-v
。
您可以创建然后附加容器,或者直接将卷创建并附加到第一个容器,然后再附加到第二个(我的示例)