一尘不染

在Docker容器之间共享卷

docker

嗨,我正在使用Docker部署一些服务,在这里我想在不同的Docker容器之间共享Docker卷。

假设我有一个Docker容器A在/ data挂载了一个卷。这是A的Dockerfile

VOLUME /data

据我了解,这会将一个卷附加到容器,但不会将主机目录装载到该容器。因此,该卷内的数据仍位于容器A内。

我有另一个提供ftp服务的容器B。它访问卷/ public下的数据。B的Dockerfile是

VOLUME /public

现在,我想将它们链接在一起,以便可以使用B来管理A的数据。从docker doc
https://docs.docker.com/engine/userguide/containers/dockervolumes/中,我将使用--volumes- from标志将A的数据量装载到B。但是此命令会将A的数据装载到/dataB中,而不是/public在这种情况下,容器B无法访问数据。我没有找到重命名安装点的任何方法。

有什么建议或最佳做法来处理这种情况?

非常感谢!

================================================== ==

仅数据容器为这种情况提供了很好的解决方案。但是,如果您要使用volume-from并将数据装入到不同的装入点,则此问题可能会有所帮助!
如何使用Docker的–volumes-from映射卷路径?


阅读 476

收藏
2020-06-17

共1个答案

一尘不染

您可能会发现很多指向仅数据容器和的指针--volumes-from。但是,从docker
1.9开始,卷已成为一等公民,它们可以具有名称,并且具有更大的灵活性:

现在可以轻松实现所需的行为,这是一个示例:

  1. 创建一个名为name的命名数据卷service-data

    docker volume create --name service-data
    
  2. 然后,您可以使用以下-v标志创建一个将其装入/ public文件夹的容器:

    docker run -t -i -v service-data:/public debian:jessie /bin/bash
    

为了进行测试,我们在映射的文件夹中创建一个小的文本文件:

    cd public
echo 'hello' > 'hello.txt'
  1. 然后,您可以将命名卷附加到另一个容器,但是这次在data文件夹下:
    docker run -t -i -v service-data:/data debian:jessie /bin/bash
    

    ls /data #–>shows “hello.txt”

请记住,如果两个容器都使用不同的图像,请小心所有权和权限!

2020-06-17