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

问题描述 投票:0回答:2

我想知道是否有办法在同一个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 container(collector)中有一个目录,里面有一些文件:/home/collector/data

我希望将它安装到docker容器中的某个目录:store

任何方法来确保我们安装它的目录,而不是先将它复制到中间的其他地方。

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

-volumes

-volumes_from

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

docker docker-compose mount docker-volume
2个回答
1
投票

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

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


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的工作方式,文件挂载非常重要。如果要修改文件并查找要在容器之间显示的更改,请尝试安装目录而不是文件。

© www.soinside.com 2019 - 2024. All rights reserved.