在docker容器之间共享卷

Cie*_*iel 13 docker dockerfile

您好我正在使用docker部署一些服务,在这里我想在不同的docker容器之间共享docker卷.

假设我有一个docker容器A,它在/ data处安装了一个卷.这是A的Dockerfile

VOLUME /data
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这会将一个卷附加到容器,但它不会将主机目录挂载到容器.所以这个卷里面的数据仍然在容器A里面.

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

VOLUME /public
Run Code Online (Sandbox Code Playgroud)

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

处理此案件的任何建议或最佳做法?

非常感谢!

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

仅数据容器为这种情况提供了一个很好的解决方案.但是如果你想使用volume-from并将数据挂载到不同的挂载点,这个问题可能会有所帮助! 如何使用Docker的--volumes-from映射卷路径?

Sté*_* C. 23

您可能会发现很多指针都提到了仅限数据的容器和--volumes-from.但是,自Docker 1.9以来,卷已成为一等公民,他们可以拥有名称,并具有更大的灵活性:

现在很容易实现你想要的行为,这是一个例子:

  1. 使用名称创建命名数据卷service-data:

    docker volume create --name service-data
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,您可以使用-v标志创建一个容器,将其安装在/ public文件夹中:

    docker run -t -i -v service-data:/public debian:jessie /bin/bash
    
    Run Code Online (Sandbox Code Playgroud)

    出于测试目的,我们在映射文件夹中创建一个小文本文件:

    cd public
    echo 'hello' > 'hello.txt'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后,您可以将命名卷附加到第二个容器,但这次是在数据文件夹下:

    docker run -t -i -v service-data:/data debian:jessie /bin/bash
    ls /data       #-->shows "hello.txt"
    
    Run Code Online (Sandbox Code Playgroud)

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

  • “请记住,如果两个容器使用不同的映像,请小心所有权和权限!” 您能详细说明一下吗? (2认同)