【问题标题】:Volume mount one file or directory straight from Container A to Container B将一个文件或目录直接从容器 A 卷挂载到容器 B
【发布时间】:2019-02-18 07:20:12
【问题描述】:

我想知道是否有办法直接在同一个 docker 网络中将目录从 CONTAINER-A(收集器)卷挂到 CONTAINER-B(存储)?

我想通过 docker-compose 文件来做到这一点

目前我有以下:

---
services:
  collector:
    hostname: "collector"
    container_name: "collector"
  volumes_from:
  - container:store
  store:
    hostname: "store"
    container_name: "store"
version: "2.1"

我在 docker 容器(收集器)中有一个目录,其中包含一些文件:/home/collector/data

我希望将其卷安装到 docker 容器中某处的目录:存储

确保我们挂载它的目录而不首先将它复制到中间的其他地方的任何方法。

我尝试了以下方法但无济于事:

-卷

-volumes_from

非常感谢您的帮助,谢谢!

【问题讨论】:

  • 你能分享一下你实际尝试过的东西吗?如果这两件事真的需要共享文件,volumesvolumes_from 都是正确的答案。
  • @DavidMaze - 当然,我已经编辑了问题

标签: docker docker-compose mount docker-volume


【解决方案1】:

卷复制数据的唯一时间是它们是从映像初始化的命名卷。除此之外,卷始终是卷源的直接文件系统挂载。卷中的数据不存在于容器或镜像中,它只是挂载在那里。

要将同一个卷挂载到两个不同的容器中,建议使用命名卷,并将两个容器指向相同的卷名:

version: "2.1"
volumes:
  data:
services:
  collector:
    image: collector
    volumes:
    - data:/home/collector/data
  store:
    image: store
    volumes:
    - data:/home/collector/data

注意命名卷是默认初始化的,但只有一次以第一个容器的内容为起始卷。

另外请注意,由于 Linux inode 的工作方式,文件挂载是非常重要的。如果您正在修改文件并希望您的更改出现在容器之间,请尝试挂载目录而不是文件。

【讨论】:

    【解决方案2】:

    最好在顶层定义一个卷,然后将其挂载到每个容器中,如下所示:

    ---
    version: "2.1"
    
    volumes:
      foo: {}
    
    services:
    
      collector:
        hostname: "collector"
        container_name: "collector"
        volumes:
        - foo:/path/inside/collector
    
      store:
        hostname: "store"
        container_name: "store"
        volumes:
        - foo:/path/inside/store
    

    这将为您创建一个独立于两个容器的数据卷。如果您重新创建容器,数据将保留。您可以使用docker volume <command> 与卷进行交互。或者,一个简单的销毁一切的方法是docker-compose down -v

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 2021-06-02
      • 2021-09-17
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多