繁体   English   中英

在 Docker 容器之间共享卷

[英]Sharing volume between Docker containers

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

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

VOLUME /data

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

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

VOLUME /public

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

处理这种情况的任何建议或最佳做法?


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

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

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

  1. 创建一个名为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'
  3. 然后,您可以将命名卷附加到第二个容器,但这次是在数据文件夹下:

     docker run -t -i -v service-data:/data debian:jessie /bin/bash ls /data #-->shows "hello.txt"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM