【问题标题】:How to mirror docker volumes in host machine如何在主机中镜像 docker 卷
【发布时间】:2023-03-21 03:07:01
【问题描述】:

据我了解,我们有 3 种实体:

  1. 容器
  2. 主机
  3. 卷

我们可以映射

  1. 一个或多个容器的主机目录
  2. 一个或多个容器的卷

但是如何将一个卷映射到主机上的一个或多个目录呢?所以我们可以有效地创建卷的多个实时镜像?

这是我的最后一次尝试:

docker-compose.yml

version: '2'
services:
  mirroring-container:
    image: nginx
    volumes:
      - important-data:/home
      - ./mirror1:/home
      - ./mirror2:/home
      - ./mirror3:/home
volumes:
  important-data:

我期待这样,在 nginx 容器的 /home 目录中创建的任何文件也将在其他 4 个位置创建:

  1. 重要数据量
  2. 包含 docker-compose.yml 的主机目录中的文件夹 mirror1
  3. 包含 docker-compose.yml 的主机目录中的文件夹 mirror2
  4. 包含 docker-compose.yml 的主机目录中的文件夹 mirror3

但是,由于某种原因,docker 忽略了所有这些,除了最后一个。一旦我在容器的 /home 目录中创建了一个文件,它只在 mirror3 文件夹中创建,它不是在卷中创建的事件。

【问题讨论】:

  • 您观察到的行为是预期的(和记录的)行为。如果您想要文件的多个副本,则需要将数据实际复制到多个位置。 AFAIK 在 docker 中没有内置的方法可以做到这一点,适合的解决方案很可能取决于您的要求。
  • 也只是为了挑剔一点。 Docker 没有忽略其他卷。只是您一次只能在一个位置安装一件东西。在同一个地方安装第二个东西会有效地隐藏之前的安装。
  • 我不想复制文件一次。我想镜像它们,即文件夹的实时复制,以便所有更改在发生时自动复制到所有文件夹中。无论如何我可以用 docker 做到这一点吗?
  • 不,没有。您需要一些其他工具来为您解决这个问题。
  • 您可以有多个软链接到您主机上的同一目录。这样您就可以在多个位置访问相同的文件。但它们最终是相同的文件,而不是彼此的镜像。

标签: docker docker-compose


【解决方案1】:

Docker 不支持该功能。在 Linux 中,我能想到的最接近的方法是使用 raid1,但这是“低级别”,不是由 docker 管理的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2017-04-30
    相关资源
    最近更新 更多