如何将Docker容器卷安装到不同的路径?

时间:2014-07-21 17:22:36

标签: docker lxc

容器#1使用为/data定义的卷运行,我想使用运行选项--volumes-from将此卷装载到另一个容器,但我想更改路径为第二个容器。

换句话说,来自容器#1的/data应该安装到容器#2内的/custom/data

这可能吗?有解决方案吗?

谢谢!

2 个答案:

答案 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。 您可以创建然后附加容器,或者直接将卷创建并附加到第一个容器,然后再附加到第二个(我的示例)