当前位置: 首页 > 面试题库 >

在Docker容器之间共享卷

叶智
2023-03-14
问题内容

嗨,我正在使用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映射卷路径?


问题答案:

您可能会发现很多指向仅数据容器和的指针--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”

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



 类似资料:
  • 我正在使用Docker部署一些服务,我想在不同的容器之间共享Docker卷。 假设我有一个Docker容器a,它在/data处挂载了一个卷。下面是它的DockerFile: 根据我的理解,这会将卷附加到容器,但不会将主机目录挂载到容器。所以这个卷里面的数据仍然在容器A里面。

  • 问题内容: 我正在使用docker-compose和v3。我正在尝试在Docker中挂载卷: 我想将此作为卷,然后从多个容器中引用该卷。的卷配置参考仅示出了作为命名体积,用没有值,因此它不会像以上。 这给了我: 错误:在文件“ ./docker-compose.yml”中,卷“ app-volume”必须是映射而不是字符串。 显然,我知道我需要更改键/值对,但是我不确定 如何 更改它,以便可以在服

  • 我想把它作为一个卷,然后从多个容器中引用该卷。卷配置引用只将显示为命名卷,没有值,因此看起来不像上面那样。 这给了我: 错误:在文件“./docker-compose.yml”中,卷“app-volume”必须是映射,而不是字符串。 显然,我知道我需要更改键/值对,但我不确定如何更改它,以便在服务之间共享卷。 我还签出了,但这实际上只允许从其他容器继承。我看到有人在另一个包含他们想要的映射的容器上

  • 问题内容: 我在一个具有不同进程的应用程序上工作,并被要求包含那些进程以实现更多隔离。 问题在于,进程与单个“管理程序”进程共享内存以便交换数据(它们使用经典的共享缓冲区)。该解决方案是为满足性能要求而实施的,因为它在用户空间中运行,因此在用户空间和内核空间之间没有内容切换。 如果我没看错,则不可能在单个IPC名称空间内运行多个docker容器,但是我不知道单个docker容器是否可能属于不同的I

  • 问题内容: 有谁知道如何使用centos基本映像在docker容器中安装nfs共享?我已经尝试过以下命令: 并得到下一个错误: 当我尝试将其与 -o nolock 选项一起使用时,错误是: 问题答案: 对于使用,您需要具有此功能,Docker在创建容器时会丢弃该功能。 有几种解决方案: 用标志启动容器。这将导致Docker保留该功能,从而使您可以从容器内挂载NFS共享。这可能是一个安全问题;不要在

  • Windows版本和内部版本2004(操作系统内部版本19037.1) windows上安装的docker 运行诸如,,,等命令都可以正常工作。现在我想推一个图像,所以当然我必须先登录。 我在WSL终端中运行