【问题标题】:How to mount Docker container volumes to different path?如何将 Docker 容器卷挂载到不同的路径?
【发布时间】:2020-01-17 22:47:18
【问题描述】:

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

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

这可能吗?有解决办法吗?

谢谢!

【问题讨论】:

  • 不,目前无法自定义--volumes-from选项。不过,您可以尝试 [this "dirty" hack][1]。 [1]:stackoverflow.com/questions/23137544/…
  • 啊,谢谢你的回答!
  • 其实这是一条评论。 @mbarthelemy 你介意把它作为一个可以接受的答案吗?
  • 符号链接不适合你吗?如果你不想改变 docker 镜像,你也可以考虑使用环境变量传递给创建符号链接的引导脚本,或者类似的东西。

标签: docker lxc


【解决方案1】:

目前无法向--volumes-from 添加自定义选项。

有两种可能的解决方案。然而,两者都不是完美的......

解决方案 1

就我个人而言,我不喜欢这个,因为它只适用于 Linux。它不适用于 Boot2Docker。 How to map volume paths using Docker's --volumes-from?

解决方案 2

第二种解决方案是使用符号链接。这非常有效,但最后有一个警告。

运行一个带有交互式外壳的 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,它可以通过/custom/data 访问/data 的内容。

警告:您应该注意,使用--volumes-from container-1-name 的容器将同时具有/data/custom/data。使用此解决方案无法解决此问题。在大多数情况下,我想这很好。但是,如果这对您不利,您将需要寻找其他解决方案。

【讨论】:

  • 符号链接解决方案很简单,对我来说效果很好。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多