【发布时间】:2023-03-21 03:07:01
【问题描述】:
据我了解,我们有 3 种实体:
- 容器
- 主机
- 卷
我们可以映射
- 一个或多个容器的主机目录
- 一个或多个容器的卷
但是如何将一个卷映射到主机上的一个或多个目录呢?所以我们可以有效地创建卷的多个实时镜像?
这是我的最后一次尝试:
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 个位置创建:
- 重要数据量
- 包含 docker-compose.yml 的主机目录中的文件夹 mirror1
- 包含 docker-compose.yml 的主机目录中的文件夹 mirror2
- 包含 docker-compose.yml 的主机目录中的文件夹 mirror3
但是,由于某种原因,docker 忽略了所有这些,除了最后一个。一旦我在容器的 /home 目录中创建了一个文件,它只在 mirror3 文件夹中创建,它不是在卷中创建的事件。
【问题讨论】:
-
您观察到的行为是预期的(和记录的)行为。如果您想要文件的多个副本,则需要将数据实际复制到多个位置。 AFAIK 在 docker 中没有内置的方法可以做到这一点,适合的解决方案很可能取决于您的要求。
-
也只是为了挑剔一点。 Docker 没有忽略其他卷。只是您一次只能在一个位置安装一件东西。在同一个地方安装第二个东西会有效地隐藏之前的安装。
-
我不想复制文件一次。我想镜像它们,即文件夹的实时复制,以便所有更改在发生时自动复制到所有文件夹中。无论如何我可以用 docker 做到这一点吗?
-
不,没有。您需要一些其他工具来为您解决这个问题。
-
您可以有多个软链接到您主机上的同一目录。这样您就可以在多个位置访问相同的文件。但它们最终是相同的文件,而不是彼此的镜像。
标签: docker docker-compose