卷挂载一个文件或目录直接从容器 A 到容器 B

Volume mount one file or directory straight from Container A to Container B

我想知道是否有办法在同一 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 容器中某处的目录:store

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

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

-卷

-volumes_from

感谢您的帮助,谢谢!

可能最好在顶层定义一个卷,然后将其装入每个容器,如下所示:

---
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.

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

要在两个不同的容器中安装相同的卷,建议使用命名卷,并将两个容器指向相同的卷名称:

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

请注意,命名卷在默认情况下会初始化,但只会对以该卷开头的第一个容器的内容进行一次初始化。

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